Package org.pentaho.platform.repository2.unified.webservices

Source Code of org.pentaho.platform.repository2.unified.webservices.NodeRepositoryFileDataAdapter

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU General Public License, version 2 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/gpl-2.0.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program 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 General Public License for more details.
*
*
* Copyright 2006 - 2013 Pentaho Corporation.  All rights reserved.
*/

package org.pentaho.platform.repository2.unified.webservices;

import org.pentaho.platform.api.repository2.unified.data.node.DataNode;
import org.pentaho.platform.api.repository2.unified.data.node.DataNode.DataPropertyType;
import org.pentaho.platform.api.repository2.unified.data.node.DataNodeRef;
import org.pentaho.platform.api.repository2.unified.data.node.DataProperty;
import org.pentaho.platform.api.repository2.unified.data.node.NodeRepositoryFileData;

import javax.xml.bind.annotation.adapters.XmlAdapter;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class NodeRepositoryFileDataAdapter extends XmlAdapter<NodeRepositoryFileDataDto, NodeRepositoryFileData> {

  @Override
  public NodeRepositoryFileDataDto marshal( final NodeRepositoryFileData v ) {
    NodeRepositoryFileDataDto d = new NodeRepositoryFileDataDto();
    DataNodeDto node = new DataNodeDto();
    d.node = node;
    toDataNodeDto( node, v.getNode() );
    return d;
  }

  protected void toDataNodeDto( final DataNodeDto nodeDto, final DataNode node ) {
    nodeDto.name = node.getName();
    if ( node.getId() != null ) {
      nodeDto.id = node.getId().toString();
    }
    List<DataPropertyDto> dtoProps = new ArrayList<DataPropertyDto>();
    for ( DataProperty prop : node.getProperties() ) {
      DataPropertyDto dtoProp = new DataPropertyDto();
      dtoProp.name = prop.getName();
      if ( ( prop.getType() == DataPropertyType.BOOLEAN ) || ( prop.getType() == DataPropertyType.DOUBLE )
          || ( prop.getType() == DataPropertyType.LONG ) || ( prop.getType() == DataPropertyType.STRING )
          || ( prop.getType() == DataPropertyType.REF ) ) {
        dtoProp.value = prop.getString();
      } else if ( prop.getType() == DataPropertyType.DATE ) {
        Date dateProp = prop.getDate();
        dtoProp.value = dateProp != null ? String.valueOf( dateProp.getTime() ) : null;
      } else {
        throw new IllegalArgumentException();
      }
      dtoProp.type = prop.getType() != null ? prop.getType().ordinal() : -1;
      dtoProps.add( dtoProp );
    }
    nodeDto.childProperties = dtoProps;
    List<DataNodeDto> nodeDtos = new ArrayList<DataNodeDto>();
    for ( DataNode childNode : node.getNodes() ) {
      DataNodeDto child = new DataNodeDto();
      nodeDtos.add( child );
      toDataNodeDto( child, childNode );
    }
    nodeDto.childNodes = nodeDtos;
  }

  @Override
  public NodeRepositoryFileData unmarshal( final NodeRepositoryFileDataDto v ) {
    DataNode node = toDataNode( v.node );
    NodeRepositoryFileData data = new NodeRepositoryFileData( node );
    return data;
  }

  protected DataNode toDataNode( final DataNodeDto nodeDto ) {
    DataNode node = new DataNode( nodeDto.name );
    node.setId( nodeDto.id );

    for ( DataPropertyDto dtoProp : nodeDto.childProperties ) {
      if ( dtoProp.type == DataPropertyType.BOOLEAN.ordinal() ) {
        node.setProperty( dtoProp.name, Boolean.parseBoolean( dtoProp.value ) );
      } else if ( dtoProp.type == DataPropertyType.DATE.ordinal() ) {
        node.setProperty( dtoProp.name, new Date( Long.parseLong( dtoProp.value ) ) );
      } else if ( dtoProp.type == DataPropertyType.DOUBLE.ordinal() ) {
        node.setProperty( dtoProp.name, Double.parseDouble( dtoProp.value ) );
      } else if ( dtoProp.type == DataPropertyType.LONG.ordinal() ) {
        node.setProperty( dtoProp.name, Long.parseLong( dtoProp.value ) );
      } else if ( dtoProp.type == DataPropertyType.STRING.ordinal() ) {
        node.setProperty( dtoProp.name, dtoProp.value );
      } else if ( dtoProp.type == DataPropertyType.REF.ordinal() ) {
        node.setProperty( dtoProp.name, new DataNodeRef( dtoProp.value ) );
      } else {
        throw new IllegalArgumentException();
      }
    }

    for ( DataNodeDto childNodeDto : nodeDto.childNodes ) {
      node.addNode( toDataNode( childNodeDto ) );
    }

    return node;
  }

}
TOP

Related Classes of org.pentaho.platform.repository2.unified.webservices.NodeRepositoryFileDataAdapter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.