/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.content.binary; import java.util.ArrayList; import java.util.List; import com.enonic.cms.framework.blob.BlobRecord; import com.enonic.cms.framework.blob.memory.MemoryBlobRecord; import com.enonic.cms.framework.xml.IllegalCharacterCleaner; import com.enonic.cms.api.client.model.content.BinaryInput; import com.enonic.cms.api.client.model.content.file.FileBinaryInput; import com.enonic.cms.core.content.contentdata.custom.BinaryDataEntry; public class BinaryDataAndBinary { private static IllegalCharacterCleaner xmlCleaner = new IllegalCharacterCleaner(); private BinaryDataEntity binaryData; private BlobRecord binary; private String label; public BinaryDataAndBinary( BinaryDataEntity binaryData ) { this.binaryData = binaryData; } public BinaryDataAndBinary( BinaryDataEntity binaryData, byte[] binary ) { this( binaryData, new MemoryBlobRecord( binary ) ); } public BinaryDataAndBinary( BinaryDataEntity binaryData, BlobRecord binary ) { this.binaryData = binaryData; this.binary = binary; } public void setBinaryData( BinaryDataEntity value ) { this.binaryData = value; } public BinaryDataEntity getBinaryData() { return binaryData; } public BlobRecord getBinary() { return binary; } public String getLabel() { return label; } public void setLabel( String label ) { this.label = label; } public static List<BinaryDataAndBinary> createNewFrom( BinaryData[] binaryDatas ) { if ( binaryDatas == null || binaryDatas.length == 0 ) { return new ArrayList<BinaryDataAndBinary>(); } List<BinaryDataAndBinary> list = new ArrayList<BinaryDataAndBinary>( binaryDatas.length ); for ( BinaryData binaryData : binaryDatas ) { list.add( create( binaryData ) ); } return list; } public static BinaryDataAndBinary create( BinaryData binaryData ) { BinaryDataEntity binaryDataEntity = new BinaryDataEntity(); binaryDataEntity.setName( xmlCleaner.cleanXml( binaryData.fileName ) ); if ( binaryData.data != null ) { binaryDataEntity.setSize( binaryData.data.length ); } MemoryBlobRecord blob = new MemoryBlobRecord( binaryData.data ); binaryDataEntity.setBlobKey( blob.getKey().toString() ); BinaryDataAndBinary binaryDataAndBinary = new BinaryDataAndBinary( binaryDataEntity, blob ); binaryDataAndBinary.setLabel( binaryData.label ); return binaryDataAndBinary; } public BinaryDataEntity createBinaryDataForSave() { BinaryDataEntity binaryDataForSave = new BinaryDataEntity(); binaryDataForSave.setBinaryDataKey( binaryData.getBinaryDataKey() ); binaryDataForSave.setCreatedAt( binaryData.getCreatedAt() ); binaryDataForSave.setName( xmlCleaner.cleanXml( binaryData.getName() ) ); binaryDataForSave.setSize( binaryData.getSize() ); binaryDataForSave.setBlobKey( binary.getKey().toString() ); return binaryDataForSave; } public static List<BinaryDataAndBinary> convert( List<BinaryDataEntry> binaryEntries ) { List<BinaryDataAndBinary> list = new ArrayList<BinaryDataAndBinary>(); for ( BinaryDataEntry binaryDataEntry : binaryEntries ) { BinaryDataEntity binaryData = new BinaryDataEntity(); binaryData.setName( binaryDataEntry.getBinaryName() ); byte[] data = binaryDataEntry.getBinary(); binaryData.setSize( data.length ); MemoryBlobRecord blob = new MemoryBlobRecord( data ); binaryData.setBlobKey( blob.getKey().toString() ); list.add( new BinaryDataAndBinary( binaryData, blob ) ); } return list; } public static List<BinaryDataAndBinary> convertFromBinaryInputs( List<BinaryInput> binaryInputs ) { List<BinaryDataAndBinary> list = new ArrayList<BinaryDataAndBinary>(); for ( BinaryInput binaryInput : binaryInputs ) { BinaryDataAndBinary binaryDataAndBinary = convertFromBinaryInput( binaryInput ); list.add( binaryDataAndBinary ); } return list; } public static BinaryDataAndBinary convertFromBinaryInput( final BinaryInput binaryInput ) { return convertFromNameAndData( binaryInput.getBinaryName(), binaryInput.getBinary() ); } public static BinaryDataAndBinary convertFromFileBinaryInput( final FileBinaryInput binaryInput ) { BinaryDataAndBinary binaryDataAndBinary = convertFromNameAndData( binaryInput.getBinaryName(), binaryInput.getBinary() ); binaryDataAndBinary.setLabel( "source" ); return binaryDataAndBinary; } public static BinaryDataAndBinary convertFromBinaryEntry( final BinaryDataEntry binaryEntry ) { return convertFromNameAndData( binaryEntry.getBinaryName(), binaryEntry.getBinary() ); } private static BinaryDataAndBinary convertFromNameAndData( final String name, final byte[] data ) { final BinaryDataEntity binaryData = new BinaryDataEntity(); binaryData.setName( xmlCleaner.cleanXml( name ) ); binaryData.setSize( data.length ); MemoryBlobRecord blob = new MemoryBlobRecord( data ); binaryData.setBlobKey( blob.getKey().toString() ); return new BinaryDataAndBinary( binaryData, blob ); } }