1  /**************************************************************
2   *
3   * Licensed to the Apache Software Foundation (ASF) under one
4   * or more contributor license agreements.  See the NOTICE file
5   * distributed with this work for additional information
6   * regarding copyright ownership.  The ASF licenses this file
7   * to you under the Apache License, Version 2.0 (the
8   * "License"); you may not use this file except in compliance
9   * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   *
20   *************************************************************/
21  
22  
23  
24  package org.openoffice.netbeans.modules.office.actions;
25  
26  import java.io.IOException;
27  import java.io.File;
28  import java.beans.PropertyVetoException;
29  import java.util.Enumeration;
30  import java.util.Set;
31  import java.util.HashSet;
32  import java.util.Iterator;
33  import javax.swing.event.ChangeListener;
34  import javax.swing.event.ChangeEvent;
35  
36  import org.openide.ErrorManager;
37  import org.openide.filesystems.FileObject;
38  import org.openide.filesystems.FileUtil;
39  import org.openide.filesystems.FileChangeListener;
40  import org.openide.filesystems.FileEvent;
41  import org.openide.filesystems.FileAttributeEvent;
42  import org.openide.filesystems.FileRenameEvent;
43  import org.openide.cookies.OpenCookie;
44  
45  import org.openoffice.idesupport.OfficeDocument;
46  
47  import org.openoffice.netbeans.modules.office.options.OfficeSettings;
48  import org.openoffice.netbeans.modules.office.loader.OfficeDocumentDataObject;
49  import org.openoffice.netbeans.modules.office.utils.ZipMounter;
50  import org.openoffice.netbeans.modules.office.utils.ManifestParser;
51  
52  public class OfficeDocumentSupport implements OfficeDocumentCookie, OpenCookie, FileChangeListener
53  {
54      protected OfficeDocumentDataObject dataObj;
55      private boolean isMounted = false;
56      private OfficeDocument document;
57      private Set listeners;
58  
OfficeDocumentSupport(OfficeDocumentDataObject dataObj)59      public OfficeDocumentSupport(OfficeDocumentDataObject dataObj) {
60          this.dataObj = dataObj;
61          FileObject fo = dataObj.getPrimaryFile();
62          try {
63              this.document = new OfficeDocument(FileUtil.toFile(fo));
64          }
65          catch (Exception e) {
66              e.printStackTrace();
67          }
68          fo.addFileChangeListener(this);
69      }
70  
mount()71      public void mount() {
72          File file = FileUtil.toFile(dataObj.getPrimaryFile());
73  
74          try {
75              ZipMounter.getZipMounter().mountZipFile(file);
76              isMounted = true;
77          }
78          catch (IOException ioe) {
79              ErrorManager.getDefault().notify(ioe);
80          }
81          catch (PropertyVetoException pve) {
82              ErrorManager.getDefault().notify(pve);
83          }
84      }
85  
open()86      public void open () {
87          File file = FileUtil.toFile(dataObj.getPrimaryFile());
88  
89          OfficeSettings settings = OfficeSettings.getDefault();
90          File soffice = new File(settings.getOfficeDirectory().getPath(
91              File.separator + "soffice"));
92  
93          try {
94              Process p = Runtime.getRuntime ().exec (new String[] {
95                  soffice.getAbsolutePath(), file.getAbsolutePath ()
96              });
97          } catch (IOException ioe) {
98              ErrorManager.getDefault().notify(ioe);
99          }
100      }
101  
getParcels()102      public Enumeration getParcels() {
103          return document.getParcels();
104      }
105  
removeParcel(String name)106      public void removeParcel(String name) {
107          document.removeParcel(name);
108          dataObj.getPrimaryFile().refresh(true);
109      }
110  
addChangeListener(ChangeListener cl)111      public void addChangeListener(ChangeListener cl) {
112          if (listeners == null)
113              listeners = new HashSet();
114  
115          listeners.add(cl);
116      }
117  
removeChangeListener(ChangeListener cl)118      public void removeChangeListener(ChangeListener cl) {
119          if (listeners == null)
120              return;
121  
122          listeners.remove(cl);
123      }
124  
fileChanged(FileEvent fe)125      public void fileChanged(FileEvent fe) {
126          if (listeners != null) {
127              Iterator iter = listeners.iterator();
128  
129              while (iter.hasNext())
130                  ((ChangeListener)iter.next()).stateChanged(new ChangeEvent(this));
131          }
132      }
133  
fileAttributeChanged(FileAttributeEvent fe)134      public void fileAttributeChanged(FileAttributeEvent fe) {}
fileDataCreated(FileEvent fe)135      public void fileDataCreated(FileEvent fe) {}
fileDeleted(FileEvent fe)136      public void fileDeleted(FileEvent fe) {}
fileFolderCreated(FileEvent fe)137      public void fileFolderCreated(FileEvent fe) {}
fileRenamed(FileRenameEvent fe)138      public void fileRenamed(FileRenameEvent fe) {}
139  }
140