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
042 /*
043 * IncrementalDeployment.java
044 *
045 * Created on November 14, 2003, 9:13 AM
046 */
047
048 package org.netbeans.modules.j2ee.deployment.plugins.spi;
049
050 import org.netbeans.modules.j2ee.deployment.plugins.api.AppChangeDescriptor;
051 import javax.enterprise.deploy.spi.Target;
052 import javax.enterprise.deploy.spi.TargetModuleID;
053 import javax.enterprise.deploy.spi.status.ProgressObject;
054 import java.io.File;
055 import org.netbeans.modules.j2ee.deployment.devmodules.api.J2eeModule;
056 import org.netbeans.modules.j2ee.deployment.plugins.spi.config.ModuleConfiguration;
057
058 /**
059 * This interface replaces DeploymentManager calls <code>deploy</code> and <code>redeploy</code> during
060 * directory-based deployment. The calling sequence is as following:
061 * <P>
062 * Initially, j2eeserver will call <code>getDirectoryForNewApplication()</code>
063 * to request destination directory to deliver the being deployed application or
064 * stand-alone module. In case of J2EE applications, <code>getDirectoryForNewModule()</code>
065 * will be called for each child module.
066 * <P>
067 * After done with copying of files over to the destination, <code>initialDeploy()</code> will
068 * be called to signal the copying is done. Processing of the returned <code>ProgressObject</code>
069 * is the same as in <code>DeploymentManager.distribute()</code> call.
070 * <P>
071 * Subsequent deployments are incremental. For each root and child module the IDE will ask plugin
072 * for destination directory by calling <code>getDirectoryForModule()</code>. After delivering
073 * the changed files for all modules, the IDE then call <code>incrementalDeploy</code> with
074 * the description of what have changed since previous deployment.
075 *<P>
076 * For in-place file deployment, where the file copying step is skipped, method
077 * <code>getDirectoryForNewApplication</code> or <code>getDirectoryForNewModule</code> calls
078 * return null.
079 * <P>
080 * J2eeserver optain an instance of IncrementalDeployment from server integration plugin by
081 * calling {@link OptionalDeploymentManagerFactory} to optain an instance of IncrementalDeployment
082 * for each {@link javax.enterprise.deploy.spi.DeploymentManager} instance.
083 * <P>
084 * @author George Finklang
085 */
086 public abstract class IncrementalDeployment {
087
088 /**
089 * First time deployment file distribution. Before this method is called
090 * the module content files should be ready in the destination location.
091 *
092 * @param target target of deployment
093 * @param app the app to deploy
094 * @param configuration server specific data for deployment
095 * @param dir the destination directory for the given deploy app
096 * @return the object for feedback on progress of deployment
097 */
098 public abstract ProgressObject initialDeploy(Target target,
099 J2eeModule app, ModuleConfiguration configuration, File dir);
100
101 /**
102 * Before this method is called, the on-disk representation of TargetModuleID
103 * is updated.
104 * @param module the TargetModuleID of the deployed application or stand-alone module.
105 * @param changes AppChangeDescriptor describing what in the application changed.
106 * @return the ProgressObject providing feedback on deployment progress.
107 **/
108 public abstract ProgressObject incrementalDeploy(
109 TargetModuleID module, AppChangeDescriptor changes);
110
111 /**
112 * Whether the deployable object could be file deployed to the specified target
113 * @param target target in question
114 * @param deployable the deployable object in question
115 * @return true if it is possible to do file deployment
116 */
117 public abstract boolean canFileDeploy(Target target,
118 J2eeModule deployable);
119
120 /**
121 * Return absolute path which the IDE will write the specified app or
122 * stand-alone module content to.
123 * @param target target server of the deployment
124 * @param app the app or stand-alone module to deploy
125 * @param configuration server specific data for deployment
126 * @return absolute path root directory for the specified app or
127 * null if server can accept the deployment from an arbitrary directory.
128 */
129 public abstract File getDirectoryForNewApplication(Target target,
130 J2eeModule app, ModuleConfiguration configuration);
131
132 /**
133 * Return absolute path the IDE will write the app or stand-alone module content to.
134 * Note: to use deployment name, implementation nees to override this.
135 *
136 * @param deploymentName name to use in deployment
137 * @param target target server of the deployment
138 * @param configuration server specific data for deployment
139 * @return absolute path root directory for the specified app or null if server can accept the deployment from an arbitrary directory.
140 */
141 public File getDirectoryForNewApplication(String deploymentName,
142 Target target, ModuleConfiguration configuration) {
143 return getDirectoryForNewApplication(target, configuration
144 .getJ2eeModule(), configuration);
145 }
146
147 /**
148 * Return absolute path to which the IDE will write the specified module content.
149 * @param appDir the root directory of containing application
150 * @param uri the URI of child module within the app
151 * @param module the child module object to deploy
152 * @param configuration server specific data for deployment
153 * @return absolute path root directory for the specified module.
154 */
155 public abstract File getDirectoryForNewModule(File appDir,
156 String uri, J2eeModule module,
157 ModuleConfiguration configuration);
158
159 /**
160 * Return absolute path to which the IDE will write the content changes of specified module.
161 * @param module id for the target module.
162 * @return absolute path root directory for the specified module.
163 */
164 public abstract File getDirectoryForModule(TargetModuleID module);
165
166 /**
167 * Get the URI pointing to location of child module inside a application archive.
168 *
169 * @param module TargetModuleID of the child module
170 * @return its relative path within application archive, returns null by
171 * default (for standalone module)
172 */
173 public String getModuleUrl(TargetModuleID module) {
174 return null;
175 }
176
177 /**
178 * Inform the plugin that the specified module is being deployed. Notification
179 * is sent even if there is really nothing needed to be deployed.
180 *
181 * @param module module which is being deployed.
182 */
183 public void notifyDeployment(TargetModuleID module) {
184 //do nothing, override if needed
185 }
186 }
|