source: trunk/gli/src/org/greenstone/gatherer/cdm/SuperCollectionManager.java@ 13182

Last change on this file since 13182 was 12809, checked in by mdewsnip, 18 years ago

Removed all usage of collect_cfg_change_listener, as this is no longer needed either.

  • Property svn:keywords set to Author Date Id Revision
File size: 9.4 KB
Line 
1/**
2 *#########################################################################
3 *
4 * A component of the Gatherer application, part of the Greenstone digital
5 * library suite from the New Zealand Digital Library Project at the
6 * University of Waikato, New Zealand.
7 *
8 * Author: John Thompson, Greenstone Digital Library, University of Waikato
9 *
10 * Copyright (C) 1999 New Zealand Digital Library Project
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
16 *
17* This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 *########################################################################
26 */
27package org.greenstone.gatherer.cdm;
28
29import java.awt.*;
30import java.io.*;
31import java.util.*;
32import javax.swing.*;
33import javax.swing.event.*;
34import org.greenstone.gatherer.Configuration;
35import org.greenstone.gatherer.DebugStream;
36import org.greenstone.gatherer.Gatherer;
37import org.greenstone.gatherer.collection.BasicCollectionConfiguration;
38import org.greenstone.gatherer.util.CheckList;
39import org.greenstone.gatherer.util.CheckListEntry;
40import org.greenstone.gatherer.util.StaticStrings;
41import org.greenstone.gatherer.util.Utility;
42import org.greenstone.gatherer.gui.DesignPaneHeader;
43import org.w3c.dom.*;
44
45/** This class contains the information about what supercollection has been specified (if any) and methods for changing this information. Note that there is a major difference between this manager and the others in that its DOM model is never used directly in any list component. It is only used to decide whether a certain entry in the actual checklist is checked. */
46public class SuperCollectionManager
47 extends DOMProxyListModel {
48
49 static final public String SUPERCOLLECTION_COMMAND = "supercollection";
50 static final public String CCS_COMMAND = "ccs";
51 private ArrayList collection_checklist_model = null; // Model used to actually populate list
52 private Control controls = null;
53 private DOMProxyListModel model = null;
54 private String current_coll_name = null;
55 private boolean superCollectionChanged = false;
56
57 public SuperCollectionManager(Element supercollections_element) {
58 super(supercollections_element, StaticStrings.COLLECTION_ELEMENT, new SuperCollection());
59 DebugStream.println("SuperCollectionManager: " + getSize() + " supercollection members parsed.");
60 this.model = this;
61 }
62
63 public void destroy() {
64 if(controls != null) {
65 controls.destroy();
66 controls = null;
67 }
68 if(collection_checklist_model != null) {
69 collection_checklist_model.clear();
70 collection_checklist_model = null;
71 }
72 }
73
74 private void addSuperCollection(SuperCollection supercollection) {
75 if(!contains(supercollection)) {
76 add(getSize(), supercollection);
77 }
78 }
79
80 /** Method to retrieve the control for this manager.
81 * @return the Control for editing supercollection settings
82 */
83 public Control getControls() {
84 if(controls == null) {
85 // Build controls
86 this.controls = new SuperCollectionControl();
87 }
88 return controls;
89 }
90
91 public SuperCollection getSuperCollection(String collection_name) {
92 SuperCollection result = null;
93 int size = getSize();
94 for(int i = 0; result == null && i < size; i++) {
95 SuperCollection supercollection = (SuperCollection) getElementAt(i);
96 if(supercollection.getName().equals(collection_name)) {
97 result = supercollection;
98 }
99 supercollection = null;
100 }
101 return result;
102 }
103 /** Called when the detail mode has changed which in turn may cause several design elements to be available/hidden
104 * @param mode the new mode as an int
105 */
106 public void modeChanged(int mode) {
107
108 }
109
110 private void removeSuperCollection(SuperCollection supercollection) {
111 if(contains(supercollection)) {
112 remove(supercollection);
113 }
114 }
115
116 /** Provides controls for altering the SuperCollection settings. */
117 private class SuperCollectionControl
118 extends JPanel
119 implements Control {
120
121 private boolean init = true;
122 private CheckList collection_checklist = null;
123
124 SuperCollectionControl() {
125 super();
126
127 // Creation
128 JPanel header_panel = new DesignPaneHeader("CDM.GUI.SuperCollection", "xcollectionsearching");
129
130 collection_checklist = new CheckList(false);
131 buildModel();
132 collection_checklist.setListData(collection_checklist_model);
133
134 JPanel collection_checklist_pane = new JPanel();
135 collection_checklist_pane.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
136 collection_checklist_pane.setLayout(new BorderLayout());
137 collection_checklist_pane.add(new JScrollPane(collection_checklist), BorderLayout.CENTER);
138
139 setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
140 setLayout(new BorderLayout());
141 add(header_panel, BorderLayout.NORTH);
142 add(collection_checklist_pane, BorderLayout.CENTER);
143 }
144
145 public void destroy() {
146 }
147
148 public void gainFocus() {
149 }
150
151 public void loseFocus() {
152 int super_collections_count = 0;
153 // Retrieve the current supercollections
154 ArrayList supercollections = children();
155 // Now iterate through the checklist, and for each checked box found ensure the Supercollection exists, and ensure its assigned. Remove any supercollections altered in this way from the temporary array list
156 // we ignore the current coll at the moment
157 int size = collection_checklist_model.size();
158 for(int i = 0; i < size; i++) {
159 CheckListEntry entry = (CheckListEntry) collection_checklist_model.get(i);
160 if(entry.isSelected()) {
161 String collection_name = (String) entry.getProperty();
162 if (!collection_name.equals(current_coll_name)) {
163 SuperCollection supercollection = getSuperCollection(collection_name);
164 // Create the supercollection element if necessary
165 if(supercollection == null) {
166 Element supercollection_element = root.getOwnerDocument().createElement(StaticStrings.COLLECTION_ELEMENT);
167 supercollection = new SuperCollection(supercollection_element);
168 supercollection.setName(collection_name);
169 addSuperCollection(supercollection);
170 }
171 else {
172 supercollections.remove(supercollection);
173 }
174 supercollection.setAssigned(true);
175 super_collections_count++;
176 }
177 }
178 }
179 if (super_collections_count > 0) {
180 // we have some super colls, add in the current collection
181 SuperCollection supercollection = getSuperCollection(current_coll_name);
182 // Create the supercollection element if necessary
183 if(supercollection == null) {
184 Element supercollection_element = root.getOwnerDocument().createElement(StaticStrings.COLLECTION_ELEMENT);
185 supercollection = new SuperCollection(supercollection_element);
186 supercollection.setName(current_coll_name);
187 addSuperCollection(supercollection);
188 }
189 else {
190 supercollections.remove(supercollection);
191 }
192 model.root.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
193 } else {
194 // current collection is the only one - don't bother adding it, because assigned is false, and we don't want to update the config file for an unassigned item.
195 model.root.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.FALSE_STR);
196 }
197
198 // Any collections left in the temporary list have been unselected, so delete them
199 for(int j = supercollections.size(); j > 0; j--) {
200 SuperCollection supercollection = (SuperCollection) supercollections.get(j - 1);
201 removeSuperCollection(supercollection);
202 }
203 }
204
205
206 private void buildModel()
207 {
208 collection_checklist_model = new ArrayList();
209 current_coll_name = Gatherer.c_man.getCollection().getName();
210
211 File collect_directory = new File(Gatherer.getCollectDirectoryPath());
212 File[] possible_collections = collect_directory.listFiles();
213 for(int i = 0; possible_collections != null && i < possible_collections.length; i++) {
214 File collect_cfg_file = new File(possible_collections[i], Utility.CONFIG_FILE);
215 if (collect_cfg_file.exists()) {
216 BasicCollectionConfiguration collect_cfg = new BasicCollectionConfiguration(collect_cfg_file);
217 StringBuffer title_buffer = new StringBuffer(collect_cfg.getName());
218 title_buffer.append(StaticStrings.SPACE_CHARACTER);
219 title_buffer.append(StaticStrings.OPEN_PARENTHESIS_CHARACTER);
220 title_buffer.append(possible_collections[i].getName());
221 title_buffer.append(StaticStrings.CLOSE_PARENTHESIS_CHARACTER);
222 String collection_title = title_buffer.toString();
223 title_buffer = null;
224 String collection_name = possible_collections[i].getName();
225
226 // We have to block the model collection.
227 if (collect_cfg.getName().equals("**title**")) {
228 continue;
229 }
230
231 // The current collection is always selected.
232 CheckListEntry entry = new CheckListEntry(collection_title);
233 entry.setProperty(collection_name);
234 entry.setSelected(getSuperCollection(collection_name) != null || collection_name.equals(current_coll_name));
235 entry.setFixed(collection_name.equals(current_coll_name));
236 collection_checklist_model.add(entry);
237 }
238 }
239 }
240 }
241}
Note: See TracBrowser for help on using the repository browser.