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