You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by st...@apache.org on 2013/09/27 14:13:10 UTC
svn commit: r1526863 - in /sling/branches/tooling-ide-vlt/tooling/ide:
eclipse-core/META-INF/
eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ eclipse-ui/
eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/
Author: stefanegli
Date: Fri Sep 27 12:13:10 2013
New Revision: 1526863
URL: http://svn.apache.org/r1526863
Log:
SLING-3130 : show bundle state (active, installed) next to synchronization state in wst servers view
Added:
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BundleStateHelper.java (with props)
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ServerModuleDecorator.java (with props)
Modified:
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/META-INF/MANIFEST.MF
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/META-INF/MANIFEST.MF
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/META-INF/MANIFEST.MF?rev=1526863&r1=1526862&r2=1526863&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/META-INF/MANIFEST.MF (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/META-INF/MANIFEST.MF Fri Sep 27 12:13:10 2013
@@ -14,6 +14,7 @@ Bundle-ClassPath: .
Import-Package: org.apache.commons.httpclient;version="3.1.0",
org.apache.commons.httpclient.auth;version="3.1.0",
org.apache.commons.httpclient.methods;version="3.1.0",
+ org.apache.commons.httpclient.params;version="3.1.0",
org.apache.sling.ide.artifacts,
org.apache.sling.ide.filter,
org.apache.sling.ide.osgi,
@@ -37,6 +38,7 @@ Import-Package: org.apache.commons.httpc
org.eclipse.wst.server.core,
org.eclipse.wst.server.core.model,
org.eclipse.wst.server.core.util,
+ org.json,
org.osgi.service.component;version="1.1.0"
Export-Package: org.apache.sling.ide.eclipse.core,
org.apache.sling.ide.eclipse.core.internal
Added: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BundleStateHelper.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BundleStateHelper.java?rev=1526863&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BundleStateHelper.java (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BundleStateHelper.java Fri Sep 27 12:13:10 2013
@@ -0,0 +1,149 @@
+/*
+ * 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 java.util.jar.Manifest;
+
+import org.apache.commons.httpclient.Credentials;
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.HttpStatus;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
+import org.apache.sling.ide.eclipse.core.ISlingLaunchpadServer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.wst.server.core.IServer;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
+public class BundleStateHelper {
+
+ private static final QualifiedName STATE_KEY = new QualifiedName("org.apache.sling.ide.eclipse.core.internal.bundlestatehelper", "state");
+ private static final Object EMPTY_STATE = new Object();
+
+ public static void resetBundleState(IServer server, IProject project) {
+ try {
+ project.setSessionProperty(STATE_KEY, null);
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ public static Object getBundleState(IServer server, IProject project) {
+ if (project==null) {
+ return null;
+ }
+ Object state;
+ try {
+ state = project.getSessionProperty(STATE_KEY);
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ return null;
+ }
+ if (state!=null) {
+ if (state==EMPTY_STATE) {
+ return null;
+ } else {
+ return state;
+ }
+ }
+ try {
+ if (server==null) {
+ return null;
+ }
+ state = doRecalcDecorationState(server, project);
+ project.setSessionProperty(STATE_KEY, state);
+ if (state==EMPTY_STATE) {
+ return null;
+ } else {
+ return String.valueOf(state);
+ }
+ } catch (CoreException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ private static Object doRecalcDecorationState(IServer server, IProject project) {
+ try {
+ if (!ProjectHelper.isBundleProject(project)) {
+ return EMPTY_STATE;
+ }
+ IJavaProject javaProject = ProjectHelper.asJavaProject(project);
+ String hostname = server.getHost();
+ int launchpadPort = server.getAttribute(ISlingLaunchpadServer.PROP_PORT, 8080);
+ if (project.exists() && !javaProject.exists()) {
+ // then it's not a java project..
+ return EMPTY_STATE;
+ }
+ IPath outputLocation = javaProject.getOutputLocation();
+ outputLocation = outputLocation.removeFirstSegments(1);
+ IPath manifestFilePath = outputLocation.append("META-INF/MANIFEST.MF");
+ IFile manifestFile = project.getFile(manifestFilePath);
+ String bundlename;
+ if (manifestFile.exists()) {
+ Manifest manifest = new Manifest(manifestFile.getContents());
+ bundlename = manifest.getMainAttributes().getValue("Bundle-SymbolicName");
+ } else {
+ String groupId = ProjectHelper.getMavenProperty(project, "groupId");
+ String artifactId = ProjectHelper.getMavenProperty(project, "artifactId");
+ if (groupId==null || groupId.isEmpty()) {
+ bundlename = artifactId;
+ } else {
+ bundlename = groupId + "." + artifactId;
+ }
+ }
+ String username = server.getAttribute(ISlingLaunchpadServer.PROP_USERNAME, "admin");
+ String password = server.getAttribute(ISlingLaunchpadServer.PROP_PASSWORD, "admin");
+ GetMethod method = new GetMethod("http://"+hostname+":"+launchpadPort+"/system/console/bundles/"+bundlename+".json");
+ int resultCode = getHttpClient(username, password).executeMethod(method);
+ if (resultCode!=HttpStatus.SC_OK) {
+ return " ["+resultCode+"]";
+ }
+ String responseBodyAsString = method.getResponseBodyAsString(16*1024); // relevant data is in first 1k anyway
+ JSONObject result = new JSONObject(responseBodyAsString);
+ JSONArray dataArray = (JSONArray) result.get("data");
+ JSONObject firstElement = (JSONObject) dataArray.get(0);
+ return " ["+firstElement.get("state")+"]";
+ } catch (Exception e) {
+ e.printStackTrace();
+ return e.getMessage();
+ }
+ }
+
+ private static HttpClient getHttpClient(String user, String password) {
+ final HttpClient client = new HttpClient();
+ client.getHttpConnectionManager().getParams().setConnectionTimeout(
+ 5000);
+
+ // authentication stuff
+ client.getParams().setAuthenticationPreemptive(true);
+ Credentials defaultcreds = new UsernamePasswordCredentials(user,
+ password);
+ client.getState().setCredentials(AuthScope.ANY, defaultcreds);
+
+ return client;
+ }
+
+}
Propchange: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/BundleStateHelper.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java?rev=1526863&r1=1526862&r2=1526863&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/ProjectHelper.java Fri Sep 27 12:13:10 2013
@@ -110,7 +110,7 @@ public class ProjectHelper {
return facetedProject.hasProjectFacet(facet);
}
- static IJavaProject asJavaProject(IProject project) {
+ public static IJavaProject asJavaProject(IProject project) {
return JavaCore.create(project);
}
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java?rev=1526863&r1=1526862&r2=1526863&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/internal/SlingLaunchpadBehaviour.java Fri Sep 27 12:13:10 2013
@@ -217,6 +217,7 @@ public class SlingLaunchpadBehaviour ext
// otherwise, for run and profile modes we explicitly publish the bundle module
// TODO: make this configurable as part of the server config
publishBundleModule(module, monitor);
+ BundleStateHelper.resetBundleState(getServer(), module[0].getProject());
}
} else if (ProjectHelper.isContentProject(module[0].getProject())) {
if ((kind == IServer.PUBLISH_AUTO || kind == IServer.PUBLISH_INCREMENTAL) && deltaKind == ServerBehaviourDelegate.NO_CHANGE) {
@@ -226,6 +227,7 @@ public class SlingLaunchpadBehaviour ext
}
try {
publishContentModule(kind, deltaKind, module, monitor);
+ BundleStateHelper.resetBundleState(getServer(), module[0].getProject());
} catch (SerializationException e) {
throw new CoreException(new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Serialization error for "
+ trace.toString(), e));
Modified: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml?rev=1526863&r1=1526862&r2=1526863&view=diff
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml (original)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/plugin.xml Fri Sep 27 12:13:10 2013
@@ -469,6 +469,20 @@
</and>
</enablement>
</decorator>
+ <decorator
+ adaptable="true"
+ class="org.apache.sling.ide.eclipse.ui.internal.ServerModuleDecorator"
+ id="org.apache.sling.ide.eclipse-ui.serverModuleDecorator"
+ label="ServerModule Decorator"
+ lightweight="true"
+ location="BOTTOM_LEFT"
+ state="true">
+ <enablement>
+ <objectClass
+ name="org.eclipse.wst.server.ui.IServerModule">
+ </objectClass>
+ </enablement>
+ </decorator>
</extension>
<extension
point="org.eclipse.ui.navigator.linkHelper">
Added: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ServerModuleDecorator.java
URL: http://svn.apache.org/viewvc/sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ServerModuleDecorator.java?rev=1526863&view=auto
==============================================================================
--- sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ServerModuleDecorator.java (added)
+++ sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ServerModuleDecorator.java Fri Sep 27 12:13:10 2013
@@ -0,0 +1,40 @@
+/*
+ * 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.ui.internal;
+
+import org.apache.sling.ide.eclipse.core.internal.BundleStateHelper;
+import org.eclipse.jface.viewers.BaseLabelProvider;
+import org.eclipse.jface.viewers.IDecoration;
+import org.eclipse.jface.viewers.ILightweightLabelDecorator;
+import org.eclipse.wst.server.ui.IServerModule;
+
+public class ServerModuleDecorator extends BaseLabelProvider implements ILightweightLabelDecorator {
+
+ @Override
+ public void decorate(Object element, IDecoration decoration) {
+ if (!(element instanceof IServerModule)) {
+ return;
+ }
+ IServerModule serverModule = (IServerModule)element;
+ Object state = BundleStateHelper.getBundleState(serverModule.getServer(), serverModule.getModule()[0].getProject());
+ if (state==null) {
+ return;
+ }
+ decoration.addSuffix(String.valueOf(state));
+ }
+
+}
Propchange: sling/branches/tooling-ide-vlt/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/internal/ServerModuleDecorator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain