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

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

all these managers now implement modeChanged()

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