blob: 68ecdcc8eb083513d935c7d4492d78024d7c3d8b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sling.ide.eclipse.core.internal;
import org.apache.sling.ide.eclipse.core.DefaultSlingLaunchpadConfiguration;
import org.apache.sling.ide.eclipse.core.ISlingLaunchpadConfiguration;
import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServerWorkingCopy;
import org.eclipse.wst.server.core.model.ServerDelegate;
import org.osgi.framework.Version;
public class SlingLaunchpadServer extends ServerDelegate implements ISlingLaunchpadServer {
private static final String MODULE_TYPE_SLING_CONTENT = "sling.content";
private static final String MODULE_TYPE_SLING_BUNDLE = "sling.bundle";
private ISlingLaunchpadConfiguration config;
@Override
public ISlingLaunchpadConfiguration getConfiguration() {
if (config != null) {
return config;
}
return config = new SlingLaunchpadConfiguration(this);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.server.core.model.ServerDelegate#canModifyModules(org.eclipse.wst.server.core.IModule[],
* org.eclipse.wst.server.core.IModule[])
*/
@Override
public IStatus canModifyModules(IModule[] toAdd, IModule[] toRemove) {
if (toAdd == null) {
return Status.OK_STATUS;
}
for (IModule module : toAdd) {
if (!MODULE_TYPE_SLING_CONTENT.equals(module.getModuleType().getId()) &&
!MODULE_TYPE_SLING_BUNDLE.equals(module.getModuleType().getId())) {
return new Status(IStatus.ERROR, Activator.PLUGIN_ID,
"Will only handle modules of type 'sling.content' or 'sling.bundle'");
}
}
return Status.OK_STATUS;
}
@Override
public IModule[] getChildModules(IModule[] module) {
if (module == null) {
return null;
}
// no nested modules for now
return new IModule[0];
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.server.core.model.ServerDelegate#getRootModules(org.eclipse.wst.server.core.IModule)
*/
@Override
public IModule[] getRootModules(IModule arg0) throws CoreException {
if (MODULE_TYPE_SLING_CONTENT.equals(arg0.getModuleType().getId()) ||
MODULE_TYPE_SLING_BUNDLE.equals(arg0.getModuleType().getId())) {
return new IModule[] { arg0 };
}
throw new CoreException(new Status(IStatus.ERROR, "org.apache.sling.slingclipse", 0,
"Will only handle modules of type 'sling.content' or 'sling.bundle'", null));
}
/*
* (non-Javadoc)
*
* @see org.eclipse.wst.server.core.model.ServerDelegate#modifyModules(org.eclipse.wst.server.core.IModule[],
* org.eclipse.wst.server.core.IModule[], org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
public void modifyModules(IModule[] toAdd, IModule[] toRemove, IProgressMonitor arg2) throws CoreException {
IStatus status = canModifyModules(toAdd, toRemove);
if (!status.isOK()) {
throw new CoreException(status);
}
// TODO - what else do we do?
}
@Override
public void setDefaults(IProgressMonitor monitor) {
setAttribute(PROP_PORT, DefaultSlingLaunchpadConfiguration.INSTANCE.getPort());
setAttribute(PROP_DEBUG_PORT, DefaultSlingLaunchpadConfiguration.INSTANCE.getDebugPort());
setAttribute(PROP_CONTEXT_PATH, "/");
setAttribute(PROP_USERNAME, DefaultSlingLaunchpadConfiguration.INSTANCE.getUsername());
setAttribute(PROP_PASSWORD, DefaultSlingLaunchpadConfiguration.INSTANCE.getPassword());
}
@Override
public Version getBundleVersion(String bundleSymbolicName) {
String rawValue = getAttribute(String.format(PROP_BUNDLE_VERSION_FORMAT, bundleSymbolicName), (String) null);
return rawValue != null ? new Version(rawValue) : null;
}
@Override
public void setBundleVersion(String bundleSymbolicName, Version version, IProgressMonitor monitor) {
String stringVersion = version != null ? version.toString() : null;
IServerWorkingCopy wc = getServer().createWorkingCopy();
wc.setAttribute(String.format(PROP_BUNDLE_VERSION_FORMAT, bundleSymbolicName), stringVersion);
try {
wc.save(false, monitor);
} catch (CoreException e) {
throw new RuntimeException(e);
}
}
}