1*cd519653SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*cd519653SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*cd519653SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*cd519653SAndrew Rist  * distributed with this work for additional information
6*cd519653SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*cd519653SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*cd519653SAndrew Rist  * "License"); you may not use this file except in compliance
9*cd519653SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*cd519653SAndrew Rist  *
11*cd519653SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*cd519653SAndrew Rist  *
13*cd519653SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*cd519653SAndrew Rist  * software distributed under the License is distributed on an
15*cd519653SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cd519653SAndrew Rist  * KIND, either express or implied.  See the License for the
17*cd519653SAndrew Rist  * specific language governing permissions and limitations
18*cd519653SAndrew Rist  * under the License.
19*cd519653SAndrew Rist  *
20*cd519653SAndrew Rist  *************************************************************/
21*cd519653SAndrew Rist 
22*cd519653SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir package org.openoffice.netbeans.modules.office.loader;
25cdf0e10cSrcweir 
26cdf0e10cSrcweir import java.io.File;
27cdf0e10cSrcweir import java.io.IOException;
28cdf0e10cSrcweir import java.beans.PropertyEditor;
29cdf0e10cSrcweir import java.beans.PropertyEditorSupport;
30cdf0e10cSrcweir 
31cdf0e10cSrcweir import org.openide.loaders.DataFolder;
32cdf0e10cSrcweir import org.openide.loaders.DataObject;
33cdf0e10cSrcweir import org.openide.loaders.DataFilter;
34cdf0e10cSrcweir import org.openide.loaders.DataObjectExistsException;
35cdf0e10cSrcweir 
36cdf0e10cSrcweir import org.openide.filesystems.FileObject;
37cdf0e10cSrcweir import org.openide.filesystems.FileUtil;
38cdf0e10cSrcweir 
39cdf0e10cSrcweir import org.openide.nodes.CookieSet;
40cdf0e10cSrcweir import org.openide.nodes.Node;
41cdf0e10cSrcweir import org.openide.nodes.PropertySupport;
42cdf0e10cSrcweir import org.openide.nodes.Sheet;
43cdf0e10cSrcweir import org.openide.util.HelpCtx;
44cdf0e10cSrcweir 
45cdf0e10cSrcweir import org.openoffice.idesupport.filter.*;
46cdf0e10cSrcweir import org.openoffice.idesupport.zip.ParcelZipper;
47cdf0e10cSrcweir import org.openoffice.netbeans.modules.office.actions.ParcelFolderCookie;
48cdf0e10cSrcweir import org.openoffice.netbeans.modules.office.actions.ParcelFolderSupport;
49cdf0e10cSrcweir 
50cdf0e10cSrcweir public class ParcelFolder extends DataFolder {
51cdf0e10cSrcweir 
52cdf0e10cSrcweir     public static final String LANGUAGE_ATTRIBUTE = "language";
53cdf0e10cSrcweir 
ParcelFolder(FileObject pf, ParcelFolderDataLoader loader)54cdf0e10cSrcweir     public ParcelFolder(FileObject pf, ParcelFolderDataLoader loader)
55cdf0e10cSrcweir         throws DataObjectExistsException {
56cdf0e10cSrcweir         super(pf, loader);
57cdf0e10cSrcweir         CookieSet cookies = getCookieSet();
58cdf0e10cSrcweir         cookies.add(new ParcelFolderSupport(this));
59cdf0e10cSrcweir     }
60cdf0e10cSrcweir 
createNodeDelegate()61cdf0e10cSrcweir     public Node createNodeDelegate() {
62cdf0e10cSrcweir         return new ParcelFolderNode(this, new ParcelFolderFilter());
63cdf0e10cSrcweir     }
64cdf0e10cSrcweir 
65cdf0e10cSrcweir     public class ParcelFolderNode extends DataFolder.FolderNode {
66cdf0e10cSrcweir         private static final String LOCATION = "location";
67cdf0e10cSrcweir         private static final String FILTER = "filter";
68cdf0e10cSrcweir         private static final String LANGUAGE = LANGUAGE_ATTRIBUTE;
69cdf0e10cSrcweir         private static final String CLASSPATH = "classpath";
70cdf0e10cSrcweir 
71cdf0e10cSrcweir         private File location;
72cdf0e10cSrcweir         private FileFilter filter;
73cdf0e10cSrcweir         private String language;
74cdf0e10cSrcweir         private String classpath;
75cdf0e10cSrcweir 
76cdf0e10cSrcweir         private final FileFilter DEFAULT_FILTER = BinaryOnlyFilter.getInstance();
77cdf0e10cSrcweir 
ParcelFolderNode(ParcelFolder pf, DataFilter dataFilter)78cdf0e10cSrcweir         public ParcelFolderNode(ParcelFolder pf, DataFilter dataFilter) {
79cdf0e10cSrcweir             super(pf.createNodeChildren(dataFilter));
80cdf0e10cSrcweir 
81cdf0e10cSrcweir             location = (File)pf.getPrimaryFile().getAttribute(LOCATION);
82cdf0e10cSrcweir             if (location == null)
83cdf0e10cSrcweir                 location = FileUtil.toFile(pf.getPrimaryFile());
84cdf0e10cSrcweir 
85cdf0e10cSrcweir             String name = (String)pf.getPrimaryFile().getAttribute(FILTER);
86cdf0e10cSrcweir             if (name == null)
87cdf0e10cSrcweir                 filter = DEFAULT_FILTER;
88cdf0e10cSrcweir             else {
89cdf0e10cSrcweir                 for (int i = 0; i < availableFilters.length; i++)
90cdf0e10cSrcweir                     if (name.equals(availableFilters[i].toString()))
91cdf0e10cSrcweir                         filter = availableFilters[i];
92cdf0e10cSrcweir             }
93cdf0e10cSrcweir 
94cdf0e10cSrcweir             language = (String)pf.getPrimaryFile().getAttribute(LANGUAGE);
95cdf0e10cSrcweir 
96cdf0e10cSrcweir             ParcelFolderCookie cookie =
97cdf0e10cSrcweir                 (ParcelFolderCookie)pf.getCookie(ParcelFolderCookie.class);
98cdf0e10cSrcweir             String s = cookie.getClasspath();
99cdf0e10cSrcweir             if (s != null) {
100cdf0e10cSrcweir                 classpath = s;
101cdf0e10cSrcweir             }
102cdf0e10cSrcweir             else {
103cdf0e10cSrcweir                 classpath = ".";
104cdf0e10cSrcweir                 cookie.setClasspath(classpath);
105cdf0e10cSrcweir             }
106cdf0e10cSrcweir         }
107cdf0e10cSrcweir 
getTargetDir()108cdf0e10cSrcweir         public File getTargetDir() {
109cdf0e10cSrcweir             return location;
110cdf0e10cSrcweir         }
111cdf0e10cSrcweir 
getFileFilter()112cdf0e10cSrcweir         public FileFilter getFileFilter() {
113cdf0e10cSrcweir             return filter;
114cdf0e10cSrcweir         }
115cdf0e10cSrcweir 
getLanguage()116cdf0e10cSrcweir         public String getLanguage() {
117cdf0e10cSrcweir             if (language == null)
118cdf0e10cSrcweir                 language = (String)getPrimaryFile().getAttribute(LANGUAGE);
119cdf0e10cSrcweir             return language;
120cdf0e10cSrcweir         }
121cdf0e10cSrcweir 
createSheet()122cdf0e10cSrcweir         public Sheet createSheet() {
123cdf0e10cSrcweir             Sheet sheet;
124cdf0e10cSrcweir             Sheet.Set props;
125cdf0e10cSrcweir             Node.Property prop;
126cdf0e10cSrcweir 
127cdf0e10cSrcweir             sheet = super.createSheet();
128cdf0e10cSrcweir             props = sheet.get(Sheet.PROPERTIES);
129cdf0e10cSrcweir             if (props == null) {
130cdf0e10cSrcweir                 props = Sheet.createPropertiesSet();
131cdf0e10cSrcweir                 sheet.put(props);
132cdf0e10cSrcweir             }
133cdf0e10cSrcweir 
134cdf0e10cSrcweir             // prop = createLocationProperty();
135cdf0e10cSrcweir             // props.put(prop);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir             prop = createFilterProperty();
138cdf0e10cSrcweir             props.put(prop);
139cdf0e10cSrcweir 
140cdf0e10cSrcweir             prop = createFilterProperty();
141cdf0e10cSrcweir             props.put(prop);
142cdf0e10cSrcweir 
143cdf0e10cSrcweir             // prop = createLanguageProperty();
144cdf0e10cSrcweir             // props.put(prop);
145cdf0e10cSrcweir 
146cdf0e10cSrcweir             prop = createClasspathProperty();
147cdf0e10cSrcweir             props.put(prop);
148cdf0e10cSrcweir 
149cdf0e10cSrcweir             return sheet;
150cdf0e10cSrcweir         }
151cdf0e10cSrcweir 
createLocationProperty()152cdf0e10cSrcweir         private Node.Property createLocationProperty() {
153cdf0e10cSrcweir            Node.Property prop =
154cdf0e10cSrcweir                new PropertySupport.ReadWrite(LOCATION, File.class,
155cdf0e10cSrcweir                    "Location", "Output location of Parcel Zip File") {
156cdf0e10cSrcweir                     public void setValue(Object obj) {
157cdf0e10cSrcweir                         if (obj instanceof File) {
158cdf0e10cSrcweir                             location = (File)obj;
159cdf0e10cSrcweir                             try {
160cdf0e10cSrcweir                                 getPrimaryFile().setAttribute(LOCATION, location);
161cdf0e10cSrcweir                             }
162cdf0e10cSrcweir                             catch (IOException ioe) {
163cdf0e10cSrcweir                             }
164cdf0e10cSrcweir                         }
165cdf0e10cSrcweir                     }
166cdf0e10cSrcweir 
167cdf0e10cSrcweir                     public Object getValue() {
168cdf0e10cSrcweir                         return location;
169cdf0e10cSrcweir                     }
170cdf0e10cSrcweir                 };
171cdf0e10cSrcweir             prop.setValue("files", Boolean.FALSE);
172cdf0e10cSrcweir             return prop;
173cdf0e10cSrcweir         }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir         private String[] languages = {"Java", "BeanShell"};
176cdf0e10cSrcweir 
createLanguageProperty()177cdf0e10cSrcweir         private Node.Property createLanguageProperty() {
178cdf0e10cSrcweir             Node.Property prop =
179cdf0e10cSrcweir                new PropertySupport.ReadWrite(LANGUAGE, String.class,
180cdf0e10cSrcweir                    "Parcel Language", "Language of scripts in this Parcel") {
181cdf0e10cSrcweir                     public void setValue(Object obj) {
182cdf0e10cSrcweir                         if (obj instanceof String) {
183cdf0e10cSrcweir                             language = (String)obj;
184cdf0e10cSrcweir 
185cdf0e10cSrcweir                             try {
186cdf0e10cSrcweir                                 getPrimaryFile().setAttribute(LANGUAGE, language);
187cdf0e10cSrcweir                             }
188cdf0e10cSrcweir                             catch (IOException ioe) {
189cdf0e10cSrcweir                             }
190cdf0e10cSrcweir                         }
191cdf0e10cSrcweir                     }
192cdf0e10cSrcweir 
193cdf0e10cSrcweir                     public Object getValue() {
194cdf0e10cSrcweir                         if (language == null)
195cdf0e10cSrcweir                             language = (String)getPrimaryFile().getAttribute(LANGUAGE);
196cdf0e10cSrcweir                         return language;
197cdf0e10cSrcweir                     }
198cdf0e10cSrcweir 
199cdf0e10cSrcweir                     public PropertyEditor getPropertyEditor() {
200cdf0e10cSrcweir                         return new PropertyEditorSupport() {
201cdf0e10cSrcweir                             public String[] getTags() {
202cdf0e10cSrcweir                                 return languages;
203cdf0e10cSrcweir                             }
204cdf0e10cSrcweir 
205cdf0e10cSrcweir                             public void setAsText(String text) {
206cdf0e10cSrcweir                                 for (int i = 0; i < languages.length; i++)
207cdf0e10cSrcweir                                     if (text.equals(languages[i]))
208cdf0e10cSrcweir                                         this.setValue(languages[i]);
209cdf0e10cSrcweir                             }
210cdf0e10cSrcweir 
211cdf0e10cSrcweir                             public String getAsText() {
212cdf0e10cSrcweir                                 return (String)this.getValue();
213cdf0e10cSrcweir                             }
214cdf0e10cSrcweir                         };
215cdf0e10cSrcweir                     }
216cdf0e10cSrcweir                 };
217cdf0e10cSrcweir             return prop;
218cdf0e10cSrcweir         }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir         private FileFilter[] availableFilters = new FileFilter[] {
221cdf0e10cSrcweir             BinaryOnlyFilter.getInstance(), AllFilesFilter.getInstance()};
222cdf0e10cSrcweir 
createFilterProperty()223cdf0e10cSrcweir         private Node.Property createFilterProperty() {
224cdf0e10cSrcweir             Node.Property prop =
225cdf0e10cSrcweir                new PropertySupport.ReadWrite(FILTER, String.class,
226cdf0e10cSrcweir                    "File Filter", "Files to be included in Parcel") {
227cdf0e10cSrcweir                     public void setValue(Object obj) {
228cdf0e10cSrcweir                         if (obj instanceof FileFilter) {
229cdf0e10cSrcweir                             filter = (FileFilter)obj;
230cdf0e10cSrcweir 
231cdf0e10cSrcweir                             try {
232cdf0e10cSrcweir                                 getPrimaryFile().setAttribute(FILTER, filter.toString());
233cdf0e10cSrcweir                             }
234cdf0e10cSrcweir                             catch (IOException ioe) {
235cdf0e10cSrcweir                             }
236cdf0e10cSrcweir                         }
237cdf0e10cSrcweir                     }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir                     public Object getValue() {
240cdf0e10cSrcweir                         return filter;
241cdf0e10cSrcweir                     }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir                     public PropertyEditor getPropertyEditor() {
244cdf0e10cSrcweir                         return new PropertyEditorSupport() {
245cdf0e10cSrcweir                             public String[] getTags() {
246cdf0e10cSrcweir                                 String[] tags = new String[availableFilters.length];
247cdf0e10cSrcweir 
248cdf0e10cSrcweir                                 for (int i = 0; i < availableFilters.length; i++)
249cdf0e10cSrcweir                                     tags[i] = availableFilters[i].toString();
250cdf0e10cSrcweir 
251cdf0e10cSrcweir                                 return tags;
252cdf0e10cSrcweir                             }
253cdf0e10cSrcweir 
254cdf0e10cSrcweir                             public void setAsText(String text) {
255cdf0e10cSrcweir                                 for (int i = 0; i < availableFilters.length; i++)
256cdf0e10cSrcweir                                     if (text.equals(availableFilters[i].toString()))
257cdf0e10cSrcweir                                         this.setValue(availableFilters[i]);
258cdf0e10cSrcweir                             }
259cdf0e10cSrcweir 
260cdf0e10cSrcweir                             public String getAsText() {
261cdf0e10cSrcweir                                 return this.getValue().toString();
262cdf0e10cSrcweir                             }
263cdf0e10cSrcweir                         };
264cdf0e10cSrcweir                     }
265cdf0e10cSrcweir                 };
266cdf0e10cSrcweir             return prop;
267cdf0e10cSrcweir         }
268cdf0e10cSrcweir 
createClasspathProperty()269cdf0e10cSrcweir         private Node.Property createClasspathProperty() {
270cdf0e10cSrcweir            Node.Property prop =
271cdf0e10cSrcweir                new PropertySupport.ReadWrite(CLASSPATH, String.class,
272cdf0e10cSrcweir                    "Classpath", "Classpath property for scripts in this parcel") {
273cdf0e10cSrcweir                     public void setValue(Object obj) {
274cdf0e10cSrcweir                         if (obj instanceof String) {
275cdf0e10cSrcweir                             classpath = (String)obj;
276cdf0e10cSrcweir 
277cdf0e10cSrcweir                             ParcelFolderCookie cookie = (ParcelFolderCookie)
278cdf0e10cSrcweir                                 getDataObject().getCookie(ParcelFolderCookie.class);
279cdf0e10cSrcweir                             cookie.setClasspath(classpath);
280cdf0e10cSrcweir                         }
281cdf0e10cSrcweir                     }
282cdf0e10cSrcweir 
283cdf0e10cSrcweir                     public Object getValue() {
284cdf0e10cSrcweir                         return classpath;
285cdf0e10cSrcweir                     }
286cdf0e10cSrcweir                 };
287cdf0e10cSrcweir             return prop;
288cdf0e10cSrcweir         }
289cdf0e10cSrcweir     }
290cdf0e10cSrcweir 
291cdf0e10cSrcweir     private class ParcelFolderFilter implements DataFilter {
acceptDataObject(DataObject dobj)292cdf0e10cSrcweir         public boolean acceptDataObject(DataObject dobj) {
293cdf0e10cSrcweir             String name = dobj.getPrimaryFile().getNameExt();
294cdf0e10cSrcweir             if (name.equals(ParcelZipper.PARCEL_DESCRIPTOR_XML))
295cdf0e10cSrcweir                 return false;
296cdf0e10cSrcweir             return true;
297cdf0e10cSrcweir         }
298cdf0e10cSrcweir     }
299cdf0e10cSrcweir }
300