summaryrefslogtreecommitdiff
path: root/scripting/java/com/sun/star/script/framework/container/Parcel.java
diff options
context:
space:
mode:
Diffstat (limited to 'scripting/java/com/sun/star/script/framework/container/Parcel.java')
-rw-r--r--scripting/java/com/sun/star/script/framework/container/Parcel.java308
1 files changed, 308 insertions, 0 deletions
diff --git a/scripting/java/com/sun/star/script/framework/container/Parcel.java b/scripting/java/com/sun/star/script/framework/container/Parcel.java
new file mode 100644
index 000000000000..40790eae6b28
--- /dev/null
+++ b/scripting/java/com/sun/star/script/framework/container/Parcel.java
@@ -0,0 +1,308 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org 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 version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+package com.sun.star.script.framework.container;
+import com.sun.star.script.framework.log.*;
+import com.sun.star.script.framework.io.*;
+import com.sun.star.script.framework.provider.PathUtils;
+
+import com.sun.star.container.*;
+import com.sun.star.uno.Type;
+import com.sun.star.uno.UnoRuntime;
+
+import com.sun.star.ucb.XSimpleFileAccess;
+import com.sun.star.ucb.XSimpleFileAccess2;
+import java.io.*;
+
+public class Parcel implements XNameContainer
+{
+ protected ParcelDescriptor m_descriptor;
+ protected String name;
+ protected ParcelContainer parent;
+ protected XSimpleFileAccess m_xSFA;
+ public Parcel( XSimpleFileAccess xSFA, ParcelContainer parent, ParcelDescriptor desc, String parcelName )
+ {
+ this( parent, desc, parcelName );
+ this.m_xSFA = xSFA;
+ }
+
+ public Parcel( ParcelContainer parent, ParcelDescriptor desc, String parcelName )
+ {
+ this.parent = parent;
+ this.m_descriptor = desc;
+ this.name = parcelName;
+ }
+
+ /**
+ * Tests if this <tt>Parcel</tt> is in an UNO package
+ * or within a sub package within an UNO package
+ *
+ * @return <tt>true</tt> if has parent <tt>false</tt> otherwise
+ */
+ public boolean isUnoPkg() { return parent.isUnoPkg(); }
+
+ public String getName()
+ {
+ return name;
+ }
+ public java.lang.Object getByName( String aName ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
+ {
+ LogUtils.DEBUG("** Parcel.getByName for " + aName );
+ ScriptEntry script = null;
+ try
+ {
+ if ( m_descriptor != null && hasElements() )
+ {
+ ScriptEntry[] scripts = m_descriptor.getScriptEntries();
+ if ( scripts.length != 0 )
+ {
+ for ( int index = 0; index < scripts.length; index++ )
+ {
+ if ( scripts[ index ].getLanguageName().equals( aName ) )
+ {
+ script = scripts[ index ];
+ break;
+ }
+ }
+ }
+ }
+ }
+ // catch unknown or un-checked exceptions
+ catch ( Exception e )
+ {
+ throw new com.sun.star.lang.WrappedTargetException( e.toString() );
+ }
+ if ( script == null )
+ {
+ LogUtils.DEBUG("No script for " + aName );
+ throw new com.sun.star.container.NoSuchElementException("No script named " + aName );
+ }
+ ScriptMetaData data = new ScriptMetaData( this, script, null );
+
+ LogUtils.DEBUG("returning date for " + aName );
+ return data;
+ }
+ public String[] getElementNames()
+ {
+ String[] results = new String[0];
+ if ( m_descriptor != null )
+ {
+ ScriptEntry[] scripts = m_descriptor.getScriptEntries();
+ results = new String[ scripts.length ];
+ for ( int index = 0; index < scripts.length; index++ )
+ {
+ results[ index ] = scripts[ index ].getLanguageName();
+ }
+ }
+ return results;
+ }
+ public boolean hasByName( String aName )
+ {
+
+ boolean result = true;
+ Object containee = null;
+ try
+ {
+ containee = getByName( aName );
+ if ( containee != null )
+ {
+ result = true;
+ }
+ }
+ catch( Exception e )
+ {
+ result = false;
+ }
+ return result;
+ }
+
+ public com.sun.star.uno.Type getElementType() {
+ // TODO at the moment this returns void indicating
+ // type is unknown ( from UNO point of view this is correct )
+ // but, maybe we want to have a private UNO interface
+ //
+ return new Type();
+ }
+
+ public boolean hasElements()
+ {
+ if ( m_descriptor != null && m_descriptor.getScriptEntries().length > 0 )
+ {
+ return true;
+ }
+ return false;
+ }
+
+ public void replaceByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
+ {
+ // TODO check type of aElement
+ // if not ok, throw IllegalArgument
+ if ( m_descriptor != null )
+ {
+ try
+ {
+ ScriptEntry script = (ScriptEntry)getByName( aName );
+ if ( script != null )
+ {
+ //m_descriptor.removeScriptEntry( script );
+ // TODO needs to create source file ( if there is one )
+ //m_descriptor.write();
+ }
+ else
+ {
+ throw new com.sun.star.container.NoSuchElementException("No script named " + aName );
+ }
+
+
+ }
+ // TO DO should catch specified exceptions
+ catch ( Exception e )
+ {
+ throw new com.sun.star.lang.WrappedTargetException();
+ }
+
+ }
+ }
+
+ // create
+ public void insertByName( String aName, java.lang.Object aElement ) throws com.sun.star.lang.IllegalArgumentException, ElementExistException, com.sun.star.lang.WrappedTargetException
+ {
+ // TODO check the type of aElement and throw#
+ // if not appropriate
+ try
+ {
+ if ( hasByName( aName ) )
+ {
+ throw new ElementExistException( aName );
+ }
+ ScriptMetaData script = (ScriptMetaData)aElement;
+
+ if ( script.hasSource() )
+ {
+ LogUtils.DEBUG("Inserting source: " + script.getSource());
+ if ( !script.writeSourceFile() )
+ {
+ throw new com.sun.star.lang.WrappedTargetException( "Failed to create source file " + script.getLanguageName() );
+ }
+ }
+ m_descriptor.addScriptEntry( script );
+ writeParcelDescriptor();
+ }
+ catch ( Exception e )
+ {
+ LogUtils.DEBUG("Failed to insert entry " + aName + ": " + e.getMessage());
+ throw new com.sun.star.lang.WrappedTargetException( e.toString() );
+ }
+ }
+
+
+ private void writeParcelDescriptor()
+ throws com.sun.star.ucb.CommandAbortedException,
+ com.sun.star.io.IOException,
+ com.sun.star.uno.Exception, java.io.IOException
+ {
+ String pathToDescriptor = PathUtils.make_url(
+ getPathToParcel(), ParcelDescriptor.PARCEL_DESCRIPTOR_NAME );
+
+ XSimpleFileAccess2 xSFA2 = ( XSimpleFileAccess2 )
+ UnoRuntime.queryInterface( XSimpleFileAccess2.class, m_xSFA );
+
+ if ( xSFA2 != null )
+ {
+ ByteArrayOutputStream bos = null;
+ ByteArrayInputStream bis = null;
+ XInputStreamImpl xis = null;
+ try
+ {
+ bos = new ByteArrayOutputStream( 1024 );
+ m_descriptor.write( bos );
+ bis = new ByteArrayInputStream( bos.toByteArray() );
+
+ xis = new XInputStreamImpl( bis );
+ xSFA2.writeFile( pathToDescriptor, xis );
+ }
+ finally
+ {
+ if (bos != null) bos.close();
+ if (bis != null) bis.close();
+ if (xis != null) xis.closeInput();
+ }
+ }
+ }
+
+ // delete
+ public void removeByName( String Name ) throws com.sun.star.container.NoSuchElementException, com.sun.star.lang.WrappedTargetException
+ {
+ try
+ {
+ ScriptMetaData script = null;
+ if ( ( script = (ScriptMetaData)getByName( Name ) ) != null )
+ {
+// if ( script.hasSource() )
+ {
+ if ( !script.removeSourceFile() )
+ {
+ LogUtils.DEBUG("** Parcel.removeByName Failed to remove script " + Name );
+ throw new com.sun.star.lang.WrappedTargetException("Failed to remove script " + Name );
+ }
+ LogUtils.DEBUG("** Parcel.removeByName have removed script source file " + Name );
+ }
+ m_descriptor.removeScriptEntry( script );
+ writeParcelDescriptor();
+
+ }
+ else
+ {
+ throw new com.sun.star.container.NoSuchElementException( "No script named " + Name );
+ }
+
+ }
+ catch ( Exception e )
+ {
+ LogUtils.DEBUG("** Parcel.removeByName Exception: " + e );
+ throw new com.sun.star.lang.WrappedTargetException( e.toString() );
+ }
+
+ }
+ // rename parcel
+ public void rename( String name ) throws com.sun.star.lang.WrappedTargetException
+ {
+ this.name = name;
+ }
+ public ParcelContainer getParent() { return parent; }
+ /**
+ * Returns the path of this <tt>Parcel</tt>
+ *
+ * @return <tt>String</tt> path to parcel
+ */
+ public String getPathToParcel()
+ {
+ String path = parent.getParcelContainerDir() + "/" + name;
+ return path;
+ }
+
+}
+