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

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

Tidied up the look of the Design pane. Each Design pane screen now has consistent borders, and vertical spacing between elements has been improved.

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