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.api.project.libraries;
042:
043: import org.openide.DialogDescriptor;
044: import org.openide.DialogDisplayer;
045: import org.openide.util.NbBundle;
046: import java.awt.Dialog;
047: import javax.swing.border.EmptyBorder;
048: import org.netbeans.modules.project.libraries.LibraryTypeRegistry;
049: import org.netbeans.modules.project.libraries.ui.LibrariesModel;
050: import org.netbeans.modules.project.libraries.ui.NewLibraryPanel;
051: import org.netbeans.spi.project.libraries.LibraryImplementation;
052: import org.netbeans.spi.project.libraries.LibraryStorageArea;
053: import org.netbeans.spi.project.libraries.LibraryTypeProvider;
054:
055: /** Provides method for opening Libraries customizer
056: *
057: */
058: public final class LibrariesCustomizer {
059:
060: private LibrariesCustomizer() {
061: }
062:
063: /**
064: * Shows libraries customizer for given library manager.
065: * @param activeLibrary if not null the activeLibrary is selected in the opened customizer
066: * @return true if user pressed OK and libraries were sucessfully modified
067: */
068: public static boolean showCustomizer(Library activeLibrary,
069: LibraryManager libraryManager) {
070: org.netbeans.modules.project.libraries.ui.LibrariesCustomizer customizer = new org.netbeans.modules.project.libraries.ui.LibrariesCustomizer(
071: libraryManager.getArea());
072: customizer.setBorder(new EmptyBorder(12, 12, 0, 12));
073: if (activeLibrary != null)
074: customizer.setSelectedLibrary(activeLibrary
075: .getLibraryImplementation());
076: DialogDescriptor descriptor = new DialogDescriptor(customizer,
077: NbBundle.getMessage(LibrariesCustomizer.class,
078: "TXT_LibrariesManager"));
079: Dialog dlg = DialogDisplayer.getDefault().createDialog(
080: descriptor);
081: try {
082: dlg.setVisible(true);
083: if (descriptor.getValue() == DialogDescriptor.OK_OPTION) {
084: return customizer.apply();
085: } else {
086: return false;
087: }
088: } finally {
089: dlg.dispose();
090: }
091: }
092:
093: /**
094: * Shows libraries customizer for global libraries.
095: * @param activeLibrary if not null the activeLibrary is selected in the opened customizer
096: * @return true if user pressed OK and libraries were sucessfully modified
097: */
098: public static boolean showCustomizer(Library activeLibrary) {
099: return showCustomizer(activeLibrary, LibraryManager
100: .getDefault());
101: }
102:
103: /**
104: * Show customizer for creating new library in the given library manager.
105: * @param manager manager
106: * @return created persisted library or null if user cancelled operation
107: * @since org.netbeans.modules.project.libraries/1 1.16
108: */
109: public static Library showCreateNewLibraryCustomizer(
110: LibraryManager manager) {
111: if (manager == null) {
112: manager = LibraryManager.getDefault();
113: }
114: LibraryStorageArea area = manager.getArea();
115: if (area == null) {
116: area = LibrariesModel.GLOBAL_AREA;
117: }
118: org.netbeans.modules.project.libraries.ui.LibrariesCustomizer customizer = new org.netbeans.modules.project.libraries.ui.LibrariesCustomizer(
119: area);
120: NewLibraryPanel p = new NewLibraryPanel(customizer.getModel(),
121: null, area);
122: DialogDescriptor dd = new DialogDescriptor(p, NbBundle
123: .getMessage(LibrariesCustomizer.class,
124: "LibrariesCustomizer.createLibrary.title"),
125: true, DialogDescriptor.OK_CANCEL_OPTION, null, null);
126: p.setDialogDescriptor(dd);
127: Dialog dlg = DialogDisplayer.getDefault().createDialog(dd);
128: dlg.setVisible(true);
129: if (dd.getValue() == DialogDescriptor.OK_OPTION) {
130: LibraryImplementation impl;
131: if (area != LibrariesModel.GLOBAL_AREA) {
132: impl = customizer.getModel().createArealLibrary(
133: p.getLibraryType(), p.getLibraryName(),
134: manager.getArea());
135: } else {
136: LibraryTypeProvider provider = LibraryTypeRegistry
137: .getDefault().getLibraryTypeProvider(
138: p.getLibraryType());
139: if (provider == null) {
140: return null;
141: }
142: impl = provider.createLibrary();
143: impl.setName(p.getLibraryName());
144: }
145: customizer.getModel().addLibrary(impl);
146: customizer.forceTreeRecreation();
147: if (customizeLibrary(customizer, impl)) {
148: return manager.getLibrary(impl.getName());
149: }
150: }
151: return null;
152: }
153:
154: /**
155: * Show library customizer for the given library.
156: * @param library library
157: * @return true if library was modified or not
158: * @since org.netbeans.modules.project.libraries/1 1.16
159: */
160: public static boolean showSingleLibraryCustomizer(Library library) {
161: org.netbeans.modules.project.libraries.ui.LibrariesCustomizer customizer = new org.netbeans.modules.project.libraries.ui.LibrariesCustomizer(
162: library.getManager().getArea());
163: return customizeLibrary(customizer, library
164: .getLibraryImplementation());
165: }
166:
167: private static boolean customizeLibrary(
168: org.netbeans.modules.project.libraries.ui.LibrariesCustomizer customizer,
169: LibraryImplementation activeLibrary) {
170: customizer.hideLibrariesList();
171: customizer.setBorder(new EmptyBorder(12, 8, 0, 10));
172: customizer.setSelectedLibrary(activeLibrary);
173: DialogDescriptor descriptor = new DialogDescriptor(customizer,
174: NbBundle.getMessage(LibrariesCustomizer.class,
175: "LibrariesCustomizer.customizeLibrary.title"));
176: Dialog dlg = DialogDisplayer.getDefault().createDialog(
177: descriptor);
178: try {
179: dlg.setVisible(true);
180: if (descriptor.getValue() == DialogDescriptor.OK_OPTION) {
181: customizer.apply();
182: return true;
183: } else {
184: return false;
185: }
186: } finally {
187: dlg.dispose();
188: }
189: }
190:
191: }
|