| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| |
| package org.openoffice.netbeans.modules.office.actions; |
| |
| import java.io.IOException; |
| |
| import org.openide.cookies.*; |
| import org.openide.filesystems.FileLock; |
| import org.openide.filesystems.FileObject; |
| import org.openide.loaders.DataObject; |
| import org.openide.text.DataEditorSupport; |
| import org.openide.windows.CloneableOpenSupport; |
| |
| import org.openoffice.netbeans.modules.office.loader.ParcelDescriptorDataObject; |
| |
| /** Support for editing a data object as text. |
| * |
| * @author tomaso |
| */ |
| // Replace OpenCookie with EditCookie or maybe ViewCookie as desired: |
| public class ParcelDescriptorEditorSupport extends DataEditorSupport implements EditorCookie, OpenCookie, CloseCookie, PrintCookie { |
| |
| /** Create a new editor support. |
| * @param obj the data object whose primary file will be edited as text |
| */ |
| public ParcelDescriptorEditorSupport(ParcelDescriptorDataObject obj) { |
| super(obj, new ParcelDescriptorEnv(obj)); |
| // Set a MIME type as needed, e.g.: |
| setMIMEType("text/xml"); |
| } |
| |
| /** Called when the document is modified. |
| * Here, adding a save cookie to the object and marking it modified. |
| * @return true if the modification is acceptable |
| */ |
| protected boolean notifyModified() { |
| if (!super.notifyModified()) { |
| return false; |
| } |
| ParcelDescriptorDataObject obj = (ParcelDescriptorDataObject)getDataObject(); |
| if (obj.getCookie(SaveCookie.class) == null) { |
| obj.setModified(true); |
| // You must implement this method on the object: |
| obj.addSaveCookie(new Save()); |
| } |
| return true; |
| } |
| |
| /** Called when the document becomes unmodified. |
| * Here, removing the save cookie from the object and marking it unmodified. |
| */ |
| protected void notifyUnmodified() { |
| ParcelDescriptorDataObject obj = (ParcelDescriptorDataObject)getDataObject(); |
| SaveCookie save = (SaveCookie)obj.getCookie(SaveCookie.class); |
| if (save != null) { |
| // You must implement this method on the object: |
| obj.removeSaveCookie(save); |
| obj.setModified(false); |
| } |
| super.notifyUnmodified(); |
| } |
| |
| /** A save cookie to use for the editor support. |
| * When saved, saves the document to disk and marks the object unmodified. |
| */ |
| private class Save implements SaveCookie { |
| public void save() throws IOException { |
| saveDocument(); |
| getDataObject().setModified(false); |
| } |
| } |
| |
| /** A description of the binding between the editor support and the object. |
| * Note this may be serialized as part of the window system and so |
| * should be static, and use the transient modifier where needed. |
| */ |
| private static class ParcelDescriptorEnv extends DataEditorSupport.Env { |
| |
| //private static final long serialVersionUID = ...L; |
| |
| /** Create a new environment based on the data object. |
| * @param obj the data object to edit |
| */ |
| public ParcelDescriptorEnv(ParcelDescriptorDataObject obj) { |
| super(obj); |
| } |
| |
| /** Get the file to edit. |
| * @return the primary file normally |
| */ |
| protected FileObject getFile() { |
| return getDataObject().getPrimaryFile(); |
| } |
| |
| /** Lock the file to edit. |
| * Should be taken from the file entry if possible, helpful during |
| * e.g. deletion of the file. |
| * @return a lock on the primary file normally |
| * @throws IOException if the lock could not be taken |
| */ |
| protected FileLock takeLock() throws IOException { |
| return ((ParcelDescriptorDataObject)getDataObject()).getPrimaryEntry().takeLock(); |
| } |
| |
| /** Find the editor support this environment represents. |
| * Note that we have to look it up, as keeping a direct |
| * reference would not permit this environment to be serialized. |
| * @return the editor support |
| */ |
| public CloneableOpenSupport findCloneableOpenSupport() { |
| return (ParcelDescriptorEditorSupport)getDataObject().getCookie(ParcelDescriptorEditorSupport.class); |
| } |
| |
| } |
| |
| } |