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.api.io;
042:
043: import org.netbeans.api.java.project.JavaProjectConstants;
044: import org.netbeans.api.project.FileOwnerQuery;
045: import org.netbeans.api.project.Project;
046: import org.netbeans.api.project.SourceGroup;
047: import org.netbeans.api.project.Sources;
048: import org.netbeans.core.api.multiview.MultiViewHandler;
049: import org.netbeans.core.api.multiview.MultiViewPerspective;
050: import org.netbeans.core.api.multiview.MultiViews;
051: import org.netbeans.modules.vmd.api.io.providers.IOSupport;
052: import org.netbeans.modules.vmd.api.model.Debug;
053: import org.netbeans.modules.vmd.api.model.DesignDocument;
054: import org.openide.filesystems.FileUtil;
055: import org.openide.util.NbBundle;
056: import org.openide.windows.TopComponent;
057:
058: import java.net.URI;
059: import java.net.URISyntaxException;
060: import java.util.Arrays;
061: import java.util.List;
062:
063: /**
064: * @author David Kaspar
065: */
066: public final class ProjectUtils {
067:
068: private ProjectUtils() {
069: }
070:
071: /**
072: * Returns a project id for a project.
073: * @param project the project
074: * @return the project id
075: * @throws NullPointerException when the project parameter is null
076: */
077: public static String getProjectID(Project project) {
078: return FileUtil.toFile(project.getProjectDirectory()).toURI()
079: .toString();
080: }
081:
082: /**
083: * Returns a project instance for a project id.
084: * @param projectID the project id
085: * @return the project; null if not exists
086: * @throws RuntimeException when project id has invalid format
087: */
088: public static Project getProject(String projectID) {
089: try {
090: return FileOwnerQuery.getOwner(new URI(projectID));
091: } catch (URISyntaxException e) {
092: throw Debug.error(e);
093: }
094: }
095:
096: /**
097: * Returns a project instance for a context.
098: * @param context the context
099: * @return the project
100: * @throws NullPointerException when the context parameter is null
101: */
102: public static Project getProject(DataObjectContext context) {
103: if (context == null)
104: return null;
105: return FileOwnerQuery.getOwner(context.getDataObject()
106: .getPrimaryFile());
107: }
108:
109: /**
110: * Returns a project instance for a data object.
111: * @param document the document
112: * @return the project
113: * @throws NullPointerException when the DesignDocument parameter is null
114: */
115: public static Project getProject(DesignDocument document) {
116: return getProject(getDataObjectContextForDocument(document));
117: }
118:
119: /**
120: * Returns a DataObjectContext for a specific document.
121: * It founds a context only for those documents that are active and currently assigned to the context.
122: * There is only one active document per each context. Documents, that are loading process, are not claimed at active.
123: * @param document the document
124: * @return the context; null if no context found
125: */
126: public static DataObjectContext getDataObjectContextForDocument(
127: DesignDocument document) {
128: return IOSupport
129: .getDataObjectContextForDocumentInterface(document);
130: }
131:
132: /**
133: * Returns a list of SourceGroups for a specific data object context.
134: *
135: * @param context the data object context
136: * @return the list of SourceGroups
137: * @see org.netbeans.api.project.SourceGroup
138: */
139: public static List<SourceGroup> getSourceGroups(
140: DataObjectContext context) {
141: assert context != null;
142: Project project = getProject(context);
143: Sources sources = org.netbeans.api.project.ProjectUtils
144: .getSources(project);
145: SourceGroup[] sg = sources
146: .getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
147: return Arrays.asList(sg);
148: }
149:
150: /**
151: * Returns a list of SourceGroups for a specific projectID.
152: *
153: * @param projectID the ID of prject
154: * @return the list of SourceGroups
155: * @see org.netbeans.api.project.SourceGroup
156: */
157: public static List<SourceGroup> getSourceGroups(String projectID) {
158: assert projectID != null;
159: Project project = getProject(projectID);
160: if (project == null)
161: return null;
162: Sources sources = org.netbeans.api.project.ProjectUtils
163: .getSources(project);
164: SourceGroup[] sg = sources
165: .getSourceGroups(JavaProjectConstants.SOURCES_TYPE_JAVA);
166: return Arrays.asList(sg);
167: }
168:
169: /**
170: * RequestVisibity for TopComponent
171: */
172: public static void requestVisibility(DataObjectContext context,
173: String topComponentDisplayName) {
174: for (TopComponent tc : TopComponent.getRegistry().getOpened()) {
175: DataEditorView dev = tc.getLookup().lookup(
176: DataEditorView.class);
177: if (dev == null || dev.getContext() != context)
178: continue;
179: MultiViewHandler handler = MultiViews
180: .findMultiViewHandler(tc);
181: for (MultiViewPerspective perspective : handler
182: .getPerspectives()) {
183: if (perspective.getDisplayName().equals(
184: topComponentDisplayName)) {
185: handler.requestVisible(perspective);
186: break;
187: }
188: }
189: }
190: }
191:
192: /**
193: * Returns a display name for source editor views
194: * @return the display name
195: */
196: public static String getSourceEditorViewDisplayName() {
197: return NbBundle.getMessage(ProjectUtils.class,
198: "LBL_SourceEditorView"); // NOI18N
199: }
200:
201: }
|