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.options;
25 
26 import java.awt.Image;
27 import java.awt.Component;
28 import javax.swing.event.ChangeListener;
29 import javax.swing.event.ChangeEvent;
30 import java.beans.*;
31 
32 import org.openide.ErrorManager;
33 import org.openide.util.NbBundle;
34 import org.openide.util.Utilities;
35 
36 import org.openoffice.idesupport.OfficeInstallation;
37 import org.openoffice.netbeans.modules.office.wizard.SelectPathPanel;
38 
39 /** Description of {@link OfficeSettings}.
40  *
41  * @author tomaso
42  */
43 public class OfficeSettingsBeanInfo extends SimpleBeanInfo {
44 
getPropertyDescriptors()45     public PropertyDescriptor[] getPropertyDescriptors() {
46         try {
47             PropertyDescriptor[] props = new PropertyDescriptor[] {
48                 new PropertyDescriptor(OfficeSettings.OFFICE_DIRECTORY,
49                                OfficeSettings.class,
50                                "get" + OfficeSettings.OFFICE_DIRECTORY,
51                                "set" + OfficeSettings.OFFICE_DIRECTORY),
52                 new PropertyDescriptor(OfficeSettings.WARN_BEFORE_DOC_DEPLOY,
53                                OfficeSettings.class,
54                                "get" + OfficeSettings.WARN_BEFORE_DOC_DEPLOY,
55                                "set" + OfficeSettings.WARN_BEFORE_DOC_DEPLOY),
56                 new PropertyDescriptor(OfficeSettings.WARN_BEFORE_PARCEL_DELETE,
57                                OfficeSettings.class,
58                                "get" + OfficeSettings.WARN_BEFORE_PARCEL_DELETE,
59                                "set" + OfficeSettings.WARN_BEFORE_PARCEL_DELETE),
60                 new PropertyDescriptor(OfficeSettings.WARN_AFTER_DIR_DEPLOY,
61                                OfficeSettings.class,
62                                "get" + OfficeSettings.WARN_AFTER_DIR_DEPLOY,
63                                "set" + OfficeSettings.WARN_AFTER_DIR_DEPLOY),
64                 new PropertyDescriptor(OfficeSettings.WARN_BEFORE_MOUNT,
65                                OfficeSettings.class,
66                                "get" + OfficeSettings.WARN_BEFORE_MOUNT,
67                                "set" + OfficeSettings.WARN_BEFORE_MOUNT)
68             };
69 
70             props[0].setDisplayName(NbBundle.getMessage(
71                 OfficeSettingsBeanInfo.class, "PROP_OfficeDirectory"));
72             props[0].setShortDescription(NbBundle.getMessage(
73                 OfficeSettingsBeanInfo.class, "HINT_OfficeDirectory"));
74             props[0].setPropertyEditorClass(OfficeDirectoryEditor.class);
75 
76             props[1].setDisplayName(NbBundle.getMessage(
77                 OfficeSettingsBeanInfo.class, "PROP_WarnBeforeDocDeploy"));
78             props[1].setShortDescription(NbBundle.getMessage(
79                 OfficeSettingsBeanInfo.class, "HINT_WarnBeforeDocDeploy"));
80             props[1].setHidden(true);
81 
82             props[2].setDisplayName(NbBundle.getMessage(
83                 OfficeSettingsBeanInfo.class, "PROP_WarnAfterDirDeploy"));
84             props[2].setShortDescription(NbBundle.getMessage(
85                 OfficeSettingsBeanInfo.class, "HINT_WarnAfterDirDeploy"));
86             props[2].setHidden(true);
87 
88             props[3].setDisplayName(NbBundle.getMessage(
89                 OfficeSettingsBeanInfo.class, "PROP_WarnBeforeMount"));
90             props[3].setShortDescription(NbBundle.getMessage(
91                 OfficeSettingsBeanInfo.class, "HINT_WarnBeforeMount"));
92             props[3].setHidden(true);
93 
94             return props;
95         }
96         catch (IntrospectionException ie) {
97             ErrorManager.getDefault().notify(ie);
98             return null;
99         }
100     }
101 
getIcon(int type)102     public Image getIcon(int type) {
103         if (type == BeanInfo.ICON_COLOR_16x16 || type == BeanInfo.ICON_MONO_16x16) {
104             return Utilities.loadImage("/org/openoffice/netbeans/modules/office/options/OfficeSettingsIcon.gif");
105         } else {
106             return Utilities.loadImage("/org/openoffice/netbeans/modules/office/options/OfficeSettingsIcon32.gif");
107         }
108     }
109 
110     public static class OfficeDirectoryEditor extends PropertyEditorSupport
111         implements ChangeListener {
112 
113         private SelectPathPanel panel;
114 
getAsText()115         public String getAsText () {
116             return ((OfficeInstallation)getValue()).getPath();
117         }
118 
setAsText(String path)119         public void setAsText (String path) {
120             OfficeInstallation oi = new OfficeInstallation(path);
121 
122             if (!oi.supportsFramework())
123                 throw new IllegalArgumentException(path +
124                     " is not a valid Office install");
125             else
126                 setValue (oi);
127         }
128 
getCustomEditor()129         public Component getCustomEditor() {
130             panel = new SelectPathPanel();
131             panel.addChangeListener(this);
132             return panel.getComponent();
133         }
134 
supportsCustomEditor()135         public boolean supportsCustomEditor() {
136             return true;
137         }
138 
stateChanged(ChangeEvent evt)139         public void stateChanged(ChangeEvent evt) {
140             setValue(panel.getSelectedPath());
141         }
142     }
143 }
144