/*! * Copyright 2010 - 2015 Pentaho Corporation. All rights reserved. * * Licensed 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.pentaho.di.repository.pur; import org.pentaho.di.cluster.SlaveServer; import org.pentaho.di.core.encryption.Encr; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.repository.Repository; import org.pentaho.di.repository.RepositoryElementInterface; import org.pentaho.di.repository.StringObjectId; import org.pentaho.platform.api.repository2.unified.RepositoryFile; import org.pentaho.platform.api.repository2.unified.VersionSummary; import org.pentaho.platform.api.repository2.unified.data.node.DataNode; import org.pentaho.platform.api.repository2.unified.data.node.NodeRepositoryFileData; public class SlaveDelegate extends AbstractDelegate implements ITransformer, SharedObjectAssembler<SlaveServer>, java.io.Serializable { private static final long serialVersionUID = -8084266831877112729L; /* EESOURCE: UPDATE SERIALVERUID */ private static final String NODE_ROOT = "Slave"; //$NON-NLS-1$ private static final String PROP_PASSWORD = "PASSWORD"; //$NON-NLS-1$ private static final String PROP_USERNAME = "USERNAME"; //$NON-NLS-1$ private static final String PROP_PORT = "PORT"; //$NON-NLS-1$ private static final String PROP_HOST_NAME = "HOST_NAME"; //$NON-NLS-1$ private static final String PROP_PROXY_HOST_NAME = "PROXY_HOST_NAME"; //$NON-NLS-1$ private static final String PROP_PROXY_PORT = "PROXY_PORT"; //$NON-NLS-1$ private static final String PROP_WEBAPP_NAME = "WEBAPP_NAME"; //$NON-NLS-1$ private static final String PROP_NON_PROXY_HOSTS = "NON_PROXY_HOSTS"; //$NON-NLS-1$ private static final String PROP_MASTER = "MASTER"; //$NON-NLS-1$ // ~ Instance fields ================================================================================================= private PurRepository repo; // ~ Constructors ==================================================================================================== public SlaveDelegate( final PurRepository repo ) { super(); this.repo = repo; } public RepositoryElementInterface dataNodeToElement( DataNode rootNode ) throws KettleException { SlaveServer slaveServer = new SlaveServer(); dataNodeToElement( rootNode, slaveServer ); return slaveServer; } public void dataNodeToElement( DataNode rootNode, RepositoryElementInterface element ) throws KettleException { SlaveServer slaveServer = (SlaveServer) element; slaveServer.setHostname( getString( rootNode, PROP_HOST_NAME ) ); slaveServer.setPort( getString( rootNode, PROP_PORT ) ); slaveServer.setUsername( getString( rootNode, PROP_USERNAME ) ); slaveServer.setPassword( Encr.decryptPasswordOptionallyEncrypted( getString( rootNode, PROP_PASSWORD ) ) ); slaveServer.setProxyHostname( getString( rootNode, PROP_PROXY_HOST_NAME ) ); slaveServer.setProxyPort( getString( rootNode, PROP_PROXY_PORT ) ); slaveServer.setWebAppName( getString( rootNode, PROP_WEBAPP_NAME ) ); slaveServer.setNonProxyHosts( getString( rootNode, PROP_NON_PROXY_HOSTS ) ); slaveServer.setMaster( rootNode.getProperty( PROP_MASTER ).getBoolean() ); } public DataNode elementToDataNode( RepositoryElementInterface element ) throws KettleException { SlaveServer slaveServer = (SlaveServer) element; DataNode rootNode = new DataNode( NODE_ROOT ); /* * // Check for naming collision ObjectId slaveId = repo.getSlaveID(slaveServer.getName()); if (slaveId != null && * slaveServer.getObjectId()!=null && !slaveServer.getObjectId().equals(slaveId)) { // We have a naming collision, * abort the save throw new KettleException("Failed to save object to repository. Object [" + slaveServer.getName() * + "] already exists."); } */ // Create or version a new slave node // rootNode.setProperty( PROP_HOST_NAME, slaveServer.getHostname() ); rootNode.setProperty( PROP_PORT, slaveServer.getPort() ); rootNode.setProperty( PROP_WEBAPP_NAME, slaveServer.getWebAppName() ); rootNode.setProperty( PROP_USERNAME, slaveServer.getUsername() ); rootNode.setProperty( PROP_PASSWORD, Encr.encryptPasswordIfNotUsingVariables( slaveServer.getPassword() ) ); rootNode.setProperty( PROP_PROXY_HOST_NAME, slaveServer.getProxyHostname() ); rootNode.setProperty( PROP_PROXY_PORT, slaveServer.getProxyPort() ); rootNode.setProperty( PROP_NON_PROXY_HOSTS, slaveServer.getNonProxyHosts() ); rootNode.setProperty( PROP_MASTER, slaveServer.isMaster() ); return rootNode; } protected Repository getRepository() { return repo; } public SlaveServer assemble( RepositoryFile file, NodeRepositoryFileData data, VersionSummary version ) throws KettleException { SlaveServer slaveServer = (SlaveServer) dataNodeToElement( data.getNode() ); slaveServer.setName( file.getTitle() ); slaveServer.setObjectId( new StringObjectId( file.getId().toString() ) ); slaveServer.setObjectRevision( repo.createObjectRevision( version ) ); slaveServer.clearChanged(); return slaveServer; } }