001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.vmd.midp.screen.display;
042:
043: import java.lang.ref.WeakReference;
044: import java.util.Arrays;
045: import java.util.Map;
046: import org.netbeans.modules.vmd.api.model.DesignComponent;
047: import org.netbeans.modules.vmd.api.model.DesignDocument;
048: import org.netbeans.modules.vmd.api.model.PropertyValue;
049: import org.netbeans.modules.vmd.api.screen.display.ScreenDeviceInfo;
050: import org.netbeans.modules.vmd.api.screen.display.ScreenDeviceInfoPresenter;
051: import org.netbeans.modules.vmd.api.screen.display.ScreenDisplayPresenter;
052: import org.netbeans.modules.vmd.midp.components.MidpProjectSupport;
053: import org.netbeans.modules.vmd.midp.components.MidpTypes;
054: import org.openide.filesystems.FileAttributeEvent;
055: import org.openide.filesystems.FileChangeListener;
056: import org.openide.filesystems.FileEvent;
057: import org.openide.filesystems.FileObject;
058: import org.openide.filesystems.FileRenameEvent;
059:
060: /**
061: *
062: * @author Karol Harezlak
063: */
064: public class ScreenFileObjectListener implements FileChangeListener {
065:
066: private WeakReference<DesignComponent> component;
067: private WeakReference<DesignComponent> imageComponent;
068: private String propertyName;
069:
070: public ScreenFileObjectListener(DesignComponent component,
071: DesignComponent imageComponent, String propertyName) {
072: assert (component != null);
073: assert (imageComponent != null);
074: this .component = new WeakReference<DesignComponent>(component);
075: this .imageComponent = new WeakReference<DesignComponent>(
076: imageComponent);
077: this .propertyName = propertyName;
078: }
079:
080: public void fileFolderCreated(FileEvent fe) {
081:
082: }
083:
084: public void fileDataCreated(FileEvent fe) {
085:
086: }
087:
088: public void fileChanged(FileEvent fe) {
089: changeResourcePath(fe.getFile());
090: reload();
091: }
092:
093: public void fileDeleted(FileEvent fe) {
094: changeResourcePath(fe.getFile());
095: reload();
096: fe.getFile().removeFileChangeListener(this );
097: }
098:
099: public void fileRenamed(FileRenameEvent fe) {
100: changeResourcePath(fe.getFile());
101: reload();
102: }
103:
104: public void fileAttributeChanged(FileAttributeEvent fe) {
105: changeResourcePath(fe.getFile());
106: reload();
107: }
108:
109: private ScreenDeviceInfo getScreenDeviceInfo() {
110: if (component == null || component.get() == null)
111: return null;
112: DesignDocument document = component.get().getDocument();
113: if (document == null)
114: return null;
115: ScreenDeviceInfoPresenter dip = document.getRootComponent()
116: .getPresenter(ScreenDeviceInfoPresenter.class);
117: if (dip != null)
118: return dip.getScreenDeviceInfo();
119: return null;
120: }
121:
122: private void reload() {
123: if (component == null || component.get() == null)
124: return;
125: final DesignDocument document = component.get().getDocument();
126: document.getTransactionManager().readAccess(new Runnable() {
127: public void run() {
128: ScreenDeviceInfo deviceInfo = getScreenDeviceInfo();
129: if (deviceInfo != null) {
130: ScreenDisplayPresenter presenter = component.get()
131: .getPresenter(ScreenDisplayPresenter.class);
132: presenter.reload(deviceInfo);
133: }
134: }
135: });
136: }
137:
138: private void changeResourcePath(FileObject fo) {
139: if (component == null || component.get() == null
140: || component.get().getDocument() == null)
141: return;
142: Map<FileObject, String> fileMap = MidpProjectSupport
143: .getAllFilesForProjectByExt(component.get()
144: .getDocument(), Arrays.asList(fo.getExt()));
145: final String path = fileMap.get(fo);
146: if (component == null || component.get() == null)
147: return;
148: final DesignDocument document = component.get().getDocument();
149: document.getTransactionManager().writeAccess(new Runnable() {
150: public void run() {
151: if (propertyName != null && path != null)
152: imageComponent.get().writeProperty(propertyName,
153: MidpTypes.createStringValue(path));
154: else if (propertyName != null)
155: imageComponent.get().writeProperty(propertyName,
156: PropertyValue.createNull());
157: }
158: });
159: }
160:
161: }
|