/* * JBoss, Home of Professional Open Source * Copyright 2008, Red Hat Middleware LLC, and individual contributors * by the @authors tag. See the copyright.txt in the distribution for a * full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.profileservice.management.client.upload; import java.io.InputStream; import java.io.Serializable; import java.net.URL; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import org.jboss.deployers.spi.management.deploy.DeploymentID; import org.jboss.profileservice.spi.DeploymentOption; import org.jboss.profileservice.spi.ProfileKey; /** * A serializable DeploymentID implementation. * * @author Scott.Stark@jboss.org * @version $Revision: 91130 $ */ public class SerializableDeploymentID implements DeploymentID, Serializable { private static final long serialVersionUID = 1; /** An InputStream to use to copy the contents */ private transient InputStream contentIS; private Set<DeploymentOption> options; private String[] deploymentNames; private String[] repositoryNames; private ProfileKey profileKey; private String description; private URL contentURL; private boolean copyContent; public SerializableDeploymentID(DeploymentID deployment) { this(deployment.getNames(), deployment.getProfile(), deployment.getDescription(), deployment.getDeploymentOptions()); } public SerializableDeploymentID(String name, ProfileKey profileKey, String description) { this(new String[]{name}, profileKey, description); } public SerializableDeploymentID(String[] names, ProfileKey profileKey, String description) { this(names, profileKey, description, new DeploymentOption[0]); } public SerializableDeploymentID(String[] names, ProfileKey profileKey, String description, DeploymentOption... options) { this.deploymentNames = names; this.profileKey = profileKey; this.description = description; this.copyContent = true; // by default we copy content this.options = new HashSet<DeploymentOption>(); if(options != null && options.length > 0) { for(DeploymentOption option : options) addDeploymentOption(option); } } public String[] getNames() { return deploymentNames; } public String[] getRepositoryNames() { if(repositoryNames == null) repositoryNames = deploymentNames; return repositoryNames; } public void setRepositoryNames(String[] names) { this.repositoryNames = names; } /** * The target profile for the deployment. * For further use. */ public ProfileKey getProfile() { return this.profileKey; } public String getDescription() { return description; } public URL getContentURL() { return contentURL; } public void setContentURL(URL contentURL) { this.contentURL = contentURL; } public boolean isCopyContent() { return copyContent; } public void setCopyContent(boolean copyContent) { this.copyContent = copyContent; } /** * An optional deployment archive content stream for the top-level * deployment. * * @return the archive input stream if it exists */ public InputStream getContentIS() { return contentIS; } /** * * @param contentIS */ public void setContentIS(InputStream contentIS) { this.contentIS = contentIS; } public void addDeploymentOption(DeploymentOption option) { if(option == null) throw new IllegalArgumentException("null option"); this.options.add(option); } public DeploymentOption[] getDeploymentOptions() { return this.options.toArray(new DeploymentOption[this.options.size()]); } public boolean hasDeploymentOption(DeploymentOption option) { if(option == null) throw new IllegalArgumentException("null option"); return this.options.contains(option); } public boolean removeDeploymentOption(DeploymentOption option) { return this.options.remove(option); } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("names=").append(Arrays.toString(getNames())); // Only add the repositoryNames if it differs from deploymentNames if(getRepositoryNames() != getNames()) buffer.append(", repositoryNames=").append(Arrays.toString(getRepositoryNames())); // Only log copyContent when the contentURL is set if(getContentURL() != null) buffer.append(", copyContent=").append(copyContent); if(description != null) buffer.append(", description=").append(description); if(options != null && options.isEmpty() == false) buffer.append(", options=").append(options); return buffer.toString(); } }