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: * Portions Copyrighted 2007 Sun Microsystems, Inc.
027: */
028: package org.netbeans.modules.web.spi.webmodule;
029:
030: import java.util.Set;
031: import javax.swing.JComponent;
032: import javax.swing.event.ChangeListener;
033: import org.netbeans.modules.web.api.webmodule.WebModule;
034: import org.openide.filesystems.FileObject;
035: import org.openide.util.HelpCtx;
036:
037: /**
038: * Provides support for extending a web module with a web framework, that is,
039: * it allows to modify the web module to make use of the framework.
040: *
041: * @author Andrei Badea
042: *
043: * @since 1.9
044: */
045: public abstract class WebModuleExtender {
046:
047: /**
048: * Attaches a change listener that is to be notified of changes
049: * in the extender (e.g., the result of the {@link #isValid} method
050: * has changed.
051: *
052: * @param listener a listener.
053: */
054: public abstract void addChangeListener(ChangeListener listener);
055:
056: /**
057: * Removes a change listener.
058: *
059: * @param listener a listener.
060: */
061: public abstract void removeChangeListener(ChangeListener listener);
062:
063: /**
064: * Returns a UI component used to allow the user to customize this extender.
065: *
066: * @return a component or null if this extender does not provide a configuration UI.
067: * This method might be called more than once and it is expected to always
068: * return the same instance.
069: */
070: public abstract JComponent getComponent();
071:
072: /**
073: * Returns a help context for {@link #getComponent}.
074: *
075: * @return a help context; can be null.
076: */
077: public abstract HelpCtx getHelp();
078:
079: /**
080: * Called when the component returned by {@link #getComponent} needs to be filled
081: * with external data.
082: */
083: public abstract void update();
084:
085: /**
086: * Checks if this extender is valid (e.g., if the configuration set
087: * using the UI component returned by {@link #getComponent} is valid).
088: *
089: * @return true if the configuration is valid, false otherwise.
090: */
091: public abstract boolean isValid();
092:
093: /**
094: * Called to extend the given web module with the web framework
095: * corresponding to this extender.
096: *
097: * @param webModule the web module to be extender; never null.
098: * @return the set of newly created files in the web module.
099: */
100: public abstract Set<FileObject> extend(WebModule webModule);
101: }
|