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

Last change on this file since 12121 was 12121, checked in by kjdon, 18 years ago

removed import Dictionary line cos its not used

  • Property svn:keywords set to Author Date Id Revision
File size: 9.6 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 Gatherer.c_man.configurationChanged();
78 }
79
80 }
81
82 /** Method to retrieve the control for this manager.
83 * @return the Control for editing supercollection settings
84 */
85 public Control getControls() {
86 if(controls == null) {
87 // Build controls
88 this.controls = new SuperCollectionControl();
89 }
90 return controls;
91 }
92
93 public SuperCollection getSuperCollection(String collection_name) {
94 SuperCollection result = null;
95 int size = getSize();
96 for(int i = 0; result == null && i < size; i++) {
97 SuperCollection supercollection = (SuperCollection) getElementAt(i);
98 if(supercollection.getName().equals(collection_name)) {
99 result = supercollection;
100 }
101 supercollection = null;
102 }
103 return result;
104 }
105 /** Called when the detail mode has changed which in turn may cause several design elements to be available/hidden
106 * @param mode the new mode as an int
107 */
108 public void modeChanged(int mode) {
109
110 }
111
112 private void removeSuperCollection(SuperCollection supercollection) {
113 if(contains(supercollection)) {
114 remove(supercollection);
115 Gatherer.c_man.configurationChanged();
116 }
117 }
118
119 /** Provides controls for altering the SuperCollection settings. */
120 private class SuperCollectionControl
121 extends JPanel
122 implements Control {
123
124 private boolean init = true;
125 private CheckList collection_checklist = null;
126
127 SuperCollectionControl() {
128 super();
129
130 // Creation
131 JPanel header_panel = new DesignPaneHeader("CDM.GUI.SuperCollection", "xcollectionsearching");
132
133 collection_checklist = new CheckList(false);
134 buildModel();
135 collection_checklist.setListData(collection_checklist_model);
136
137 JPanel collection_checklist_pane = new JPanel();
138 collection_checklist_pane.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));
139 collection_checklist_pane.setLayout(new BorderLayout());
140 collection_checklist_pane.add(new JScrollPane(collection_checklist), BorderLayout.CENTER);
141
142 setBorder(BorderFactory.createEmptyBorder(0,5,0,0));
143 setLayout(new BorderLayout());
144 add(header_panel, BorderLayout.NORTH);
145 add(collection_checklist_pane, BorderLayout.CENTER);
146 }
147
148 public void destroy() {
149 }
150
151 public void gainFocus() {
152 }
153
154 public void loseFocus() {
155 CollectionDesignManager.collect_cfg_change_listener.maybeSetRebuildRequired(); // !! TO DO: This is crap
156 int super_collections_count = 0;
157 // Retrieve the current supercollections
158 ArrayList supercollections = children();
159 // 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
160 // we ignore the current coll at the moment
161 int size = collection_checklist_model.size();
162 for(int i = 0; i < size; i++) {
163 CheckListEntry entry = (CheckListEntry) collection_checklist_model.get(i);
164 if(entry.isSelected()) {
165 String collection_name = (String) entry.getProperty();
166 if (!collection_name.equals(current_coll_name)) {
167 SuperCollection supercollection = getSuperCollection(collection_name);
168 // Create the supercollection element if necessary
169 if(supercollection == null) {
170 Element supercollection_element = root.getOwnerDocument().createElement(StaticStrings.COLLECTION_ELEMENT);
171 supercollection = new SuperCollection(supercollection_element);
172 supercollection.setName(collection_name);
173 addSuperCollection(supercollection);
174 }
175 else {
176 supercollections.remove(supercollection);
177 }
178 supercollection.setAssigned(true);
179 super_collections_count++;
180 }
181 }
182 }
183 if (super_collections_count > 0) {
184 // we have some super colls, add in the current collection
185 SuperCollection supercollection = getSuperCollection(current_coll_name);
186 // Create the supercollection element if necessary
187 if(supercollection == null) {
188 Element supercollection_element = root.getOwnerDocument().createElement(StaticStrings.COLLECTION_ELEMENT);
189 supercollection = new SuperCollection(supercollection_element);
190 supercollection.setName(current_coll_name);
191 addSuperCollection(supercollection);
192 }
193 else {
194 supercollections.remove(supercollection);
195 }
196 model.root.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.TRUE_STR);
197 } else {
198 // 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.
199 model.root.setAttribute(StaticStrings.ASSIGNED_ATTRIBUTE, StaticStrings.FALSE_STR);
200 }
201
202 // Any collections left in the temporary list have been unselected, so delete them
203 for(int j = supercollections.size(); j > 0; j--) {
204 SuperCollection supercollection = (SuperCollection) supercollections.get(j - 1);
205 removeSuperCollection(supercollection);
206 }
207 }
208
209
210 private void buildModel()
211 {
212 collection_checklist_model = new ArrayList();
213 current_coll_name = Gatherer.c_man.getCollection().getName();
214
215 File collect_directory = new File(Gatherer.getCollectDirectoryPath());
216 File[] possible_collections = collect_directory.listFiles();
217 for(int i = 0; possible_collections != null && i < possible_collections.length; i++) {
218 File collect_cfg_file = new File(possible_collections[i], Utility.CONFIG_FILE);
219 if (collect_cfg_file.exists()) {
220 BasicCollectionConfiguration collect_cfg = new BasicCollectionConfiguration(collect_cfg_file);
221 StringBuffer title_buffer = new StringBuffer(collect_cfg.getName());
222 title_buffer.append(StaticStrings.SPACE_CHARACTER);
223 title_buffer.append(StaticStrings.OPEN_PARENTHESIS_CHARACTER);
224 title_buffer.append(possible_collections[i].getName());
225 title_buffer.append(StaticStrings.CLOSE_PARENTHESIS_CHARACTER);
226 String collection_title = title_buffer.toString();
227 title_buffer = null;
228 String collection_name = possible_collections[i].getName();
229
230 // We have to block the model collection.
231 if (collect_cfg.getName().equals("**title**")) {
232 continue;
233 }
234
235 // The current collection is always selected.
236 CheckListEntry entry = new CheckListEntry(collection_title);
237 entry.setProperty(collection_name);
238 entry.setSelected(getSuperCollection(collection_name) != null || collection_name.equals(current_coll_name));
239 entry.setFixed(collection_name.equals(current_coll_name));
240 collection_checklist_model.add(entry);
241 }
242 }
243 }
244 }
245}
Note: See TracBrowser for help on using the repository browser.