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: * The Original Software is NetBeans. The Initial Developer of the Original
026: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun
027: * Microsystems, Inc. All Rights Reserved.
028: *
029: * If you wish your version of this file to be governed by only the CDDL
030: * or only the GPL Version 2, indicate your decision by adding
031: * "[Contributor] elects to include this software in this distribution
032: * under the [CDDL or GPL Version 2] license." If you do not indicate a
033: * single choice of license, a recipient has the option to distribute
034: * your version of this file under either the CDDL, the GPL Version 2 or
035: * to extend the choice of license to its licensees as provided above.
036: * However, if you add GPL Version 2 code and therefore, elected the GPL
037: * Version 2 license, then the option applies only if the new code is
038: * made subject to such option by the copyright holder.
039: */
040:
041: package org.netbeans.modules.profiler.ppoints;
042:
043: import org.netbeans.api.project.Project;
044: import org.netbeans.modules.profiler.ppoints.ui.TakeSnapshotCustomizer;
045: import org.openide.ErrorManager;
046: import org.openide.filesystems.FileUtil;
047: import org.openide.util.NbBundle;
048: import org.openide.util.Utilities;
049: import java.io.File;
050: import java.text.MessageFormat;
051: import java.util.Properties;
052: import javax.swing.Icon;
053: import javax.swing.ImageIcon;
054:
055: /**
056: *
057: * @author Jiri Sedlacek
058: */
059: public class TakeSnapshotProfilingPointFactory extends
060: CodeProfilingPointFactory {
061: //~ Static fields/initializers -----------------------------------------------------------------------------------------------
062:
063: // -----
064: // I18N String constants
065: private static final String PP_TYPE = NbBundle.getMessage(
066: TakeSnapshotProfilingPointFactory.class,
067: "TakeSnapshotProfilingPointFactory_PpType"); // NOI18N
068: private static final String PP_DESCR = NbBundle.getMessage(
069: TakeSnapshotProfilingPointFactory.class,
070: "TakeSnapshotProfilingPointFactory_PpDescr"); // NOI18N
071: private static final String PP_DEFAULT_NAME = NbBundle.getMessage(
072: TakeSnapshotProfilingPointFactory.class,
073: "TakeSnapshotProfilingPointFactory_PpDefaultName"); // NOI18N
074: // -----
075: public static final Icon TAKE_SNAPSHOT_PP_ICON = new ImageIcon(
076: Utilities
077: .loadImage("org/netbeans/modules/profiler/ppoints/ui/resources/takeSnapshotProfilingPoint.png")); // NOI18N
078: public static final String TAKE_SNAPSHOT_PP_TYPE = PP_TYPE;
079: public static final String TAKE_SNAPSHOT_PP_DESCR = PP_DESCR;
080: private static TakeSnapshotProfilingPointFactory defaultInstance;
081:
082: //~ Methods ------------------------------------------------------------------------------------------------------------------
083:
084: public static TakeSnapshotProfilingPointFactory getDefault() {
085: if (defaultInstance == null) {
086: defaultInstance = new TakeSnapshotProfilingPointFactory();
087: }
088:
089: return defaultInstance;
090: }
091:
092: public String getDescription() {
093: return TAKE_SNAPSHOT_PP_DESCR;
094: }
095:
096: public Icon getIcon() {
097: return TAKE_SNAPSHOT_PP_ICON;
098: }
099:
100: public int getScope() {
101: return SCOPE_CODE;
102: }
103:
104: public String getType() {
105: return TAKE_SNAPSHOT_PP_TYPE;
106: }
107:
108: public TakeSnapshotProfilingPoint create(Project project) {
109: if (project == null) {
110: project = Utils.getCurrentProject(); // project not defined, will be detected from most active Editor or Main Project will be used
111: }
112:
113: CodeProfilingPoint.Location location = Utils
114: .getCurrentLocation(CodeProfilingPoint.Location.OFFSET_END);
115:
116: if (location.equals(CodeProfilingPoint.Location.EMPTY)) {
117: String filename = ""; // NOI18N
118: String name = Utils.getUniqueName(getType(), "", project); // NOI18N
119:
120: return new TakeSnapshotProfilingPoint(name, location,
121: project);
122: } else {
123: String filename = FileUtil.toFileObject(
124: new File(location.getFile())).getName();
125: String name = Utils.getUniqueName(getType(), MessageFormat
126: .format(PP_DEFAULT_NAME, new Object[] { "",
127: filename, location.getLine() }), project); // NOI18N
128:
129: return new TakeSnapshotProfilingPoint(name, location,
130: project);
131: }
132: }
133:
134: public boolean supportsCPU() {
135: return true;
136: }
137:
138: public boolean supportsMemory() {
139: return true;
140: }
141:
142: public boolean supportsMonitor() {
143: return false;
144: }
145:
146: protected Class getProfilingPointsClass() {
147: return TakeSnapshotProfilingPoint.class;
148: }
149:
150: protected String getServerHandlerClassName() {
151: throw new UnsupportedOperationException();
152: } // NOI18N
153:
154: protected TakeSnapshotCustomizer createCustomizer() {
155: return new TakeSnapshotCustomizer(getType(), getIcon());
156: }
157:
158: protected ProfilingPoint loadProfilingPoint(Project project,
159: Properties properties, int index) {
160: String name = properties.getProperty(index + "_"
161: + ProfilingPoint.PROPERTY_NAME, null); // NOI18N
162: String enabledStr = properties.getProperty(index + "_"
163: + ProfilingPoint.PROPERTY_ENABLED, null); // NOI18N
164: CodeProfilingPoint.Location location = CodeProfilingPoint.Location
165: .load(project, index, properties);
166: String type = properties.getProperty(index + "_"
167: + TakeSnapshotProfilingPoint.PROPERTY_TYPE, null); // NOI18N
168: String target = properties.getProperty(index + "_"
169: + TakeSnapshotProfilingPoint.PROPERTY_TARGET, null); // NOI18N
170: String file = properties
171: .getProperty(
172: index
173: + "_"
174: + TakeSnapshotProfilingPoint.PROPERTY_CUSTOM_FILE,
175: null); // NOI18N
176: String resetResultsStr = properties.getProperty(index + "_"
177: + TakeSnapshotProfilingPoint.PROPERTY_RESET_RESULTS,
178: null); // NOI18N
179:
180: if ((name == null) || (enabledStr == null)
181: || (location == null) || (type == null)
182: || (target == null) || (file == null)
183: || (resetResultsStr == null)) {
184: return null;
185: }
186:
187: TakeSnapshotProfilingPoint profilingPoint = null;
188:
189: try {
190: profilingPoint = new TakeSnapshotProfilingPoint(name,
191: location, project);
192: profilingPoint.setEnabled(Boolean.parseBoolean(enabledStr));
193: profilingPoint.setSnapshotType(type);
194: profilingPoint.setSnapshotTarget(target);
195: profilingPoint.setSnapshotFile(file);
196: profilingPoint.setResetResults(Boolean
197: .parseBoolean(resetResultsStr));
198: } catch (Exception e) {
199: ErrorManager.getDefault().log(ErrorManager.ERROR,
200: e.getMessage());
201: }
202:
203: return profilingPoint;
204: }
205:
206: protected void storeProfilingPoint(ProfilingPoint profilingPoint,
207: int index, Properties properties) {
208: TakeSnapshotProfilingPoint takeSnapshot = (TakeSnapshotProfilingPoint) profilingPoint;
209: properties.put(index + "_" + ProfilingPoint.PROPERTY_NAME,
210: takeSnapshot.getName()); // NOI18N
211: properties.put(index + "_" + ProfilingPoint.PROPERTY_ENABLED,
212: Boolean.toString(takeSnapshot.isEnabled())); // NOI18N
213: properties.put(index + "_"
214: + TakeSnapshotProfilingPoint.PROPERTY_TYPE,
215: takeSnapshot.getSnapshotType()); // NOI18N
216: properties.put(index + "_"
217: + TakeSnapshotProfilingPoint.PROPERTY_TARGET,
218: takeSnapshot.getSnapshotTarget()); // NOI18N
219: properties.put(index + "_"
220: + TakeSnapshotProfilingPoint.PROPERTY_CUSTOM_FILE,
221: (takeSnapshot.getSnapshotFile() == null) ? ""
222: : takeSnapshot.getSnapshotFile()); // NOI18N
223: properties.put(index + "_"
224: + TakeSnapshotProfilingPoint.PROPERTY_RESET_RESULTS,
225: Boolean.toString(takeSnapshot.getResetResults())); // NOI18N
226: takeSnapshot.getLocation().store(takeSnapshot.getProject(),
227: index, properties);
228: }
229: }
|