/*! ******************************************************************************
*
* Pentaho Data Integration
*
* Copyright (C) 2002-2013 by Pentaho : http://www.pentaho.com
*
*******************************************************************************
*
* 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.core.util;
import java.util.List;
import java.util.prefs.BackingStoreException;
import java.util.prefs.Preferences;
import org.apache.commons.lang.StringUtils;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleException;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.util.PluginPropertyHandler.LoadXml;
import org.pentaho.di.core.util.PluginPropertyHandler.ReadFromPreferences;
import org.pentaho.di.core.util.PluginPropertyHandler.ReadFromRepository;
import org.pentaho.di.core.util.PluginPropertyHandler.SaveToPreferences;
import org.pentaho.di.core.util.PluginPropertyHandler.SaveToRepository;
import org.pentaho.di.repository.ObjectId;
import org.pentaho.di.repository.Repository;
import org.pentaho.di.trans.step.BaseStepMeta;
import org.pentaho.di.trans.step.StepDataInterface;
import org.pentaho.di.trans.step.StepMetaInterface;
import org.pentaho.metastore.api.IMetaStore;
import org.w3c.dom.Node;
/**
* @author <a href="mailto:thomas.hoedl@aschauer-edv.at">Thomas Hoedl(asc042)</a>
*
*/
/**
* @author <a href="mailto:michael.gugerell@aschauer-edv.at">Michael Gugerell(asc145)</a>
*
*/
public abstract class AbstractStepMeta extends BaseStepMeta implements StepMetaInterface {
private static final String CONNECTION_NAME = "connection";
private final PluginPropertyFactory propertyFactory = new PluginPropertyFactory( new KeyValueSet() );
private DatabaseMeta dbMeta;
private StringPluginProperty connectionName;
/**
* Default constructor.
*/
public AbstractStepMeta() {
super();
this.connectionName = this.propertyFactory.createString( CONNECTION_NAME );
}
/**
* @return the propertyFactory
*/
public PluginPropertyFactory getPropertyFactory() {
return this.propertyFactory;
}
/**
* @return the properties
*/
public KeyValueSet getProperties() {
return this.propertyFactory.getProperties();
}
/**
* Saves properties to preferences.
*
* @throws BackingStoreException
* ...
*/
public void saveAsPreferences() throws BackingStoreException {
final Preferences node = Preferences.userNodeForPackage( this.getClass() );
this.getProperties().walk( new SaveToPreferences( node ) );
node.flush();
}
/**
* Read properties from preferences.
*/
public void readFromPreferences() {
final Preferences node = Preferences.userNodeForPackage( this.getClass() );
this.getProperties().walk( new ReadFromPreferences( node ) );
}
/**
* {@inheritDoc}
*
* @see org.pentaho.di.trans.step.StepMetaInterface#loadXML(org.w3c.dom.Node, java.util.List, java.util.Map)
*/
public void loadXML( final Node node, final List<DatabaseMeta> databaseMeta, final IMetaStore metaStore ) throws KettleXMLException {
this.getProperties().walk( new LoadXml( node ) );
initDbMeta( databaseMeta );
}
/**
* @param databaseList
* A list of available DatabaseMeta in this transformation.
*/
private void initDbMeta( final List<DatabaseMeta> databaseList ) {
if ( !StringUtils.isEmpty( this.connectionName.getValue() ) ) {
this.dbMeta = DatabaseMeta.findDatabase( databaseList, this.connectionName.getValue() );
}
}
/**
* {@inheritDoc}
*
* @see org.pentaho.di.trans.step.BaseStepMeta#getXML()
*/
@Override
public String getXML() throws KettleException {
return PluginPropertyHandler.toXml( this.getProperties() );
}
/**
* {@inheritDoc}
*
* @see org.pentaho.di.trans.step.StepMetaInterface#readRep(org.pentaho.di.repository.Repository, long,
* java.util.List, java.util.Map)
*/
public void readRep( final Repository repo, final IMetaStore metaStore, final ObjectId stepId,
final List<DatabaseMeta> databaseList ) throws KettleException {
PluginPropertyHandler.walk( this.getProperties(), new ReadFromRepository( repo, metaStore, stepId ) );
initDbMeta( databaseList );
}
/**
* {@inheritDoc}
*
* @see org.pentaho.di.trans.step.StepMetaInterface#saveRep(org.pentaho.di.repository.Repository, long, long)
*/
public void saveRep( final Repository repo, final IMetaStore metaStore, final ObjectId transformationId,
final ObjectId stepId ) throws KettleException {
final SaveToRepository handler = new SaveToRepository( repo, metaStore, transformationId, stepId );
PluginPropertyHandler.walk( this.getProperties(), handler );
}
/**
* {@inheritDoc}
*
* @see org.pentaho.di.trans.step.StepMetaInterface#getStepData()
*/
public StepDataInterface getStepData() {
// you may be override this.
return new GenericStepData();
}
/**
* @return the connectionName
*/
public StringPluginProperty getConnectionName() {
return this.connectionName;
}
/**
* @param connectionName
* the connectionName to set
*/
public void setConnectionName( final StringPluginProperty connectionName ) {
this.connectionName = connectionName;
}
/**
* @return the dbMeta
*/
public DatabaseMeta getDbMeta() {
return this.dbMeta;
}
/**
* @param dbMeta
* the dbMeta to set
*/
public void setDbMeta( final DatabaseMeta dbMeta ) {
this.dbMeta = dbMeta;
}
}