/*******************************************************************************
* Copyright (c) 2008, 2010 VMware Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* VMware Inc. - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.model.management.internal;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.management.ObjectName;
import org.eclipse.virgo.kernel.model.Artifact;
import org.eclipse.virgo.kernel.model.management.ManageableArtifact;
import org.eclipse.virgo.kernel.model.management.RuntimeArtifactModelObjectNameCreator;
import org.eclipse.virgo.nano.serviceability.NonNull;
/**
* Implementation of {@link ManageableArtifact} that delegates to an {@link Artifact} for all methods and translates
* types that are JMX-unfriendly to types that are JMX-friendly
* <p />
*
* <strong>Concurrent Semantics</strong><br />
*
* Threadsafe
*
* @see Artifact
*/
class DelegatingManageableArtifact implements ManageableArtifact {
private final RuntimeArtifactModelObjectNameCreator artifactObjectNameCreator;
private final Artifact artifact;
public DelegatingManageableArtifact(@NonNull RuntimeArtifactModelObjectNameCreator artifactObjectNameCreator, @NonNull Artifact artifact) {
this.artifactObjectNameCreator = artifactObjectNameCreator;
this.artifact = artifact;
}
/**
* {@inheritDoc}
*/
public final ObjectName[] getDependents() {
return convertToObjectNames(this.artifact.getDependents());
}
/**
* {@inheritDoc}
*/
public final String getName() {
return this.artifact.getName();
}
/**
* {@inheritDoc}
*/
public final String getState() {
return this.artifact.getState().toString();
}
/**
* {@inheritDoc}
*/
public final String getType() {
return this.artifact.getType();
}
/**
* {@inheritDoc}
*/
public final String getVersion() {
return this.artifact.getVersion().toString();
}
/**
* {@inheritDoc}
*/
public String getRegion() {
return this.artifact.getRegion().getName();
}
/**
* {@inheritDoc}
*/
public final boolean refresh() {
return this.artifact.refresh();
}
/**
* {@inheritDoc}
*/
public final void start() {
this.artifact.start();
}
/**
* {@inheritDoc}
*/
public final void stop() {
this.artifact.stop();
}
/**
* {@inheritDoc}
*/
public final void uninstall() {
this.artifact.uninstall();
}
/**
* {@inheritDoc}
*/
public final Map<String, String> getProperties() {
return this.artifact.getProperties();
}
/**
* Convert a collection of {@link Artifact}s to a collection of {@link ObjectName}s
*
* @param artifacts The {@link Artifact}s to convert
* @return The {@link ObjectName}s converted to
*/
private final ObjectName[] convertToObjectNames(Set<Artifact> artifacts) {
Set<ObjectName> objectNames = new HashSet<ObjectName>(artifacts.size());
for (Artifact artifact : artifacts) {
objectNames.add(artifactObjectNameCreator.createArtifactModel(artifact));
}
ObjectName[] objectNamesArray = new ObjectName[objectNames.size()];
return objectNames.toArray(objectNamesArray);
}
}