INTEGRATION: CWS scriptingf5 (1.1.2); FILE ADDED
2004/02/25 18:38:24 npower 1.1.2.1: #i25272# Added a container implementation ( new com/sun/star/script/framework/container defined ) to better seperate Browse functionality from io and script registry. moved this class from com/sun/star/script/framework/browse
This commit is contained in:
@@ -0,0 +1,441 @@
|
||||
/*************************************************************************
|
||||
*
|
||||
* $RCSfile: ParcelDescriptor.java,v $
|
||||
*
|
||||
* $Revision: 1.2 $
|
||||
*
|
||||
* last change: $Author: svesik $ $Date: 2004-04-19 23:06:13 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
*
|
||||
* - GNU Lesser General Public License Version 2.1
|
||||
* - Sun Industry Standards Source License Version 1.1
|
||||
*
|
||||
* Sun Microsystems Inc., October, 2000
|
||||
*
|
||||
* GNU Lesser General Public License Version 2.1
|
||||
* =============================================
|
||||
* Copyright 2000 by Sun Microsystems, Inc.
|
||||
* 901 San Antonio Road, Palo Alto, CA 94303, USA
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License version 2.1, as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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 for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
* MA 02111-1307 USA
|
||||
*
|
||||
*
|
||||
* Sun Industry Standards Source License Version 1.1
|
||||
* =================================================
|
||||
* The contents of this file are subject to the Sun Industry Standards
|
||||
* Source License Version 1.1 (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.openoffice.org/license.html.
|
||||
*
|
||||
* Software provided under this License is provided on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
|
||||
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
|
||||
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
|
||||
* See the License for the specific provisions governing your rights and
|
||||
* obligations concerning the Software.
|
||||
*
|
||||
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
|
||||
*
|
||||
* Copyright: 2000 by Sun Microsystems, Inc.
|
||||
*
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Contributor(s): _______________________________________
|
||||
*
|
||||
*
|
||||
************************************************************************/
|
||||
|
||||
package com.sun.star.script.framework.container;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.ByteArrayInputStream;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Enumeration;
|
||||
import java.util.Iterator;
|
||||
|
||||
// import javax.xml.parsers.DocumentBuilderFactory;
|
||||
// import javax.xml.parsers.DocumentBuilder;
|
||||
// import javax.xml.parsers.ParserConfigurationException;
|
||||
|
||||
import org.w3c.dom.*;
|
||||
|
||||
public class ParcelDescriptor {
|
||||
|
||||
// File name to be used for parcel descriptor files
|
||||
private static final String
|
||||
PARCEL_DESCRIPTOR_NAME = "parcel-descriptor.xml";
|
||||
|
||||
// Collection of all ParcelDescriptor created for files
|
||||
private static final Map PARCEL_DESCRIPTOR_MAP = new HashMap(5);
|
||||
|
||||
// This is the default contents of a parcel descriptor to be used when
|
||||
// creating empty descriptors
|
||||
private static final byte[] EMPTY_DOCUMENT =
|
||||
("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<parcel xmlns:parcel=\"scripting.dtd\" language=\"Java\">\n" +
|
||||
"</parcel>").getBytes();
|
||||
|
||||
private File file = null;
|
||||
private Document document = null;
|
||||
private String language = null;
|
||||
private Map languagedepprops = new Hashtable(3);
|
||||
|
||||
// returns the ParcelDescriptor in the corresponding directory
|
||||
// returns null if no ParcelDescriptor is found in the directory
|
||||
public static synchronized ParcelDescriptor
|
||||
getParcelDescriptor(File parent) {
|
||||
|
||||
File path = new File(parent, PARCEL_DESCRIPTOR_NAME);
|
||||
ParcelDescriptor pd = (ParcelDescriptor)PARCEL_DESCRIPTOR_MAP.get(path);
|
||||
|
||||
if (pd == null && path.exists()) {
|
||||
try {
|
||||
pd = new ParcelDescriptor(path);
|
||||
}
|
||||
catch (IOException ioe) {
|
||||
return null;
|
||||
}
|
||||
PARCEL_DESCRIPTOR_MAP.put(path, pd);
|
||||
}
|
||||
return pd;
|
||||
}
|
||||
|
||||
// returns a ParcelDescriptor for the corresponding directory
|
||||
// if no ParcelDescriptor exists, one is created
|
||||
public static synchronized ParcelDescriptor
|
||||
createParcelDescriptor(File parent) throws IOException {
|
||||
|
||||
ParcelDescriptor pd = getParcelDescriptor(parent);
|
||||
|
||||
if (pd == null) {
|
||||
if (parent == null || !parent.exists() || !parent.isDirectory()) {
|
||||
throw new IOException("Cannot create Parcel Descriptor");
|
||||
}
|
||||
|
||||
File path = new File(parent, PARCEL_DESCRIPTOR_NAME);
|
||||
pd = new ParcelDescriptor(path);
|
||||
PARCEL_DESCRIPTOR_MAP.put(path, pd);
|
||||
}
|
||||
return pd;
|
||||
}
|
||||
|
||||
public ParcelDescriptor() throws IOException {
|
||||
ByteArrayInputStream bis = null;
|
||||
try {
|
||||
bis = new ByteArrayInputStream(EMPTY_DOCUMENT);
|
||||
this.document = XMLParserFactory.getParser().parse(bis);
|
||||
}
|
||||
finally {
|
||||
if (bis != null)
|
||||
bis.close();
|
||||
}
|
||||
}
|
||||
|
||||
public ParcelDescriptor(Document document) {
|
||||
this.document = document;
|
||||
initLanguageProperties();
|
||||
}
|
||||
|
||||
public ParcelDescriptor(InputStream is) throws IOException {
|
||||
this(XMLParserFactory.getParser().parse(is));
|
||||
}
|
||||
|
||||
public ParcelDescriptor(File file) throws IOException {
|
||||
this(file, "Java");
|
||||
}
|
||||
|
||||
public ParcelDescriptor(File file, String language) throws IOException {
|
||||
this.file = file;
|
||||
|
||||
if (file.exists()) {
|
||||
FileInputStream fis = null;
|
||||
try {
|
||||
fis = new FileInputStream(file);
|
||||
this.document = XMLParserFactory.getParser().parse(fis);
|
||||
}
|
||||
finally {
|
||||
if (fis != null)
|
||||
fis.close();
|
||||
}
|
||||
}
|
||||
else {
|
||||
ByteArrayInputStream bis = null;
|
||||
try {
|
||||
bis = new ByteArrayInputStream(EMPTY_DOCUMENT);
|
||||
this.document = XMLParserFactory.getParser().parse(bis);
|
||||
}
|
||||
finally {
|
||||
if (bis != null)
|
||||
bis.close();
|
||||
}
|
||||
setLanguage(language);
|
||||
}
|
||||
initLanguageProperties();
|
||||
}
|
||||
|
||||
public void write(File file) throws IOException {
|
||||
FileOutputStream fos = new FileOutputStream(file);
|
||||
XMLParserFactory.getParser().write(document, fos);
|
||||
}
|
||||
|
||||
public void write() throws IOException {
|
||||
if (file == null)
|
||||
throw new FileNotFoundException("No file specified");
|
||||
|
||||
write(file);
|
||||
}
|
||||
|
||||
public void write(OutputStream out) throws IOException {
|
||||
XMLParserFactory.getParser().write(document, out);
|
||||
}
|
||||
|
||||
public Document getDocument() {
|
||||
return document;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
if (language == null) {
|
||||
if (document != null) {
|
||||
Element e = document.getDocumentElement();
|
||||
language = e.getAttribute("language");
|
||||
}
|
||||
}
|
||||
return language;
|
||||
}
|
||||
|
||||
public void setLanguage(String language) {
|
||||
this.language = language;
|
||||
|
||||
if (document != null) {
|
||||
try {
|
||||
Element e = document.getDocumentElement();
|
||||
e.setAttribute("language", language);
|
||||
}
|
||||
catch (DOMException de) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public ScriptEntry[] getScriptEntries() {
|
||||
ArrayList scripts = new ArrayList();
|
||||
NodeList scriptNodes;
|
||||
int len;
|
||||
|
||||
if (document == null ||
|
||||
(scriptNodes = document.getElementsByTagName("script")) == null ||
|
||||
(len = scriptNodes.getLength()) == 0)
|
||||
return new ScriptEntry[0];
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
String language, languagename, logicalname;
|
||||
Map langProps = new HashMap();
|
||||
NodeList nl;
|
||||
Element tmp;
|
||||
|
||||
Element scriptElement = (Element)scriptNodes.item(i);
|
||||
language = scriptElement.getAttribute("language");
|
||||
|
||||
nl = scriptElement.getElementsByTagName("logicalname");
|
||||
if (nl == null)
|
||||
logicalname = "";
|
||||
else {
|
||||
tmp = (Element)nl.item(0);
|
||||
logicalname = tmp.getAttribute("value");
|
||||
}
|
||||
|
||||
nl = scriptElement.getElementsByTagName("functionname");
|
||||
if (nl == null) {
|
||||
languagename = "";
|
||||
} else {
|
||||
tmp = (Element)nl.item(0);
|
||||
languagename = tmp.getAttribute("value");
|
||||
}
|
||||
nl = scriptElement.getElementsByTagName("languagedepprops");
|
||||
if ( nl != null && nl.getLength() > 0 )
|
||||
{
|
||||
|
||||
NodeList props = ((Element)nl.item(0)).getElementsByTagName("prop");
|
||||
if ( props != null )
|
||||
{
|
||||
for ( int j=0; j < props.getLength(); j++ )
|
||||
{
|
||||
tmp = (Element)props.item(j);
|
||||
String key = tmp.getAttribute("name");
|
||||
String val = tmp.getAttribute("value");
|
||||
langProps.put( key,val );
|
||||
}
|
||||
}
|
||||
}
|
||||
scripts.add(new ScriptEntry(language, languagename, logicalname, "",langProps));
|
||||
}
|
||||
return (ScriptEntry[])scripts.toArray(new ScriptEntry[0]);
|
||||
}
|
||||
|
||||
public void setScriptEntries(ScriptEntry[] scripts) {
|
||||
clearEntries();
|
||||
for (int i = 0; i < scripts.length; i++)
|
||||
addScriptEntry(scripts[i]);
|
||||
}
|
||||
|
||||
public void setScriptEntries(Enumeration scripts) {
|
||||
clearEntries();
|
||||
while (scripts.hasMoreElements())
|
||||
addScriptEntry((ScriptEntry) scripts.nextElement());
|
||||
}
|
||||
|
||||
public String getLanguageProperty(String name) {
|
||||
return (String)languagedepprops.get(name);
|
||||
}
|
||||
|
||||
public void setLanguageProperty(String name, String value) {
|
||||
languagedepprops.put(name, value);
|
||||
setScriptEntries(getScriptEntries());
|
||||
}
|
||||
|
||||
private void initLanguageProperties() {
|
||||
NodeList nl = document.getElementsByTagName("languagedepprops");
|
||||
int len;
|
||||
|
||||
if (nl != null && (len = nl.getLength()) != 0) {
|
||||
|
||||
for (int i = 0; i < len; i++) {
|
||||
Element e = (Element)nl.item(i);
|
||||
NodeList nl2 = e.getElementsByTagName("prop");
|
||||
int len2;
|
||||
|
||||
if (nl2 != null && (len2 = nl2.getLength()) != 0) {
|
||||
for (int j = 0; j < len2; j++) {
|
||||
Element e2 = (Element)nl2.item(j);
|
||||
|
||||
String name = e2.getAttribute("name");
|
||||
String value = e2.getAttribute("value");
|
||||
|
||||
if (getLanguageProperty(name) == null) {
|
||||
languagedepprops.put(name, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void clearEntries() {
|
||||
NodeList scriptNodes;
|
||||
Element main = document.getDocumentElement();
|
||||
int len;
|
||||
|
||||
if ((scriptNodes = document.getElementsByTagName("script")) != null &&
|
||||
(len = scriptNodes.getLength()) != 0)
|
||||
{
|
||||
for (int i = len - 1; i >= 0; i--) {
|
||||
try {
|
||||
main.removeChild(scriptNodes.item(i));
|
||||
}
|
||||
catch (DOMException de) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void removeScriptEntry(ScriptEntry script) {
|
||||
NodeList scriptNodes;
|
||||
Element main = document.getDocumentElement();
|
||||
int len;
|
||||
|
||||
if ((scriptNodes = document.getElementsByTagName("script")) != null &&
|
||||
(len = scriptNodes.getLength()) != 0)
|
||||
{
|
||||
for (int i = len - 1; i >= 0; i--) {
|
||||
try {
|
||||
Element scriptElement = (Element)scriptNodes.item(i);
|
||||
String languagename = "";
|
||||
|
||||
NodeList nl =
|
||||
scriptElement.getElementsByTagName("functionname");
|
||||
if (nl == null) {
|
||||
continue;
|
||||
} else {
|
||||
Element tmp = (Element)nl.item(0);
|
||||
languagename = tmp.getAttribute("value");
|
||||
}
|
||||
|
||||
if (languagename.equals(script.getLanguageName())) {
|
||||
main.removeChild(scriptElement);
|
||||
}
|
||||
}
|
||||
catch (DOMException de) {
|
||||
// ignore
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void addScriptEntry(ScriptEntry script) {
|
||||
Element main = document.getDocumentElement();
|
||||
Element root, item, tempitem;
|
||||
|
||||
root = document.createElement("script");
|
||||
root.setAttribute("language", script.getLanguage());
|
||||
|
||||
item = document.createElement("locale");
|
||||
item.setAttribute("lang", "en");
|
||||
tempitem = document.createElement("displayname");
|
||||
tempitem.setAttribute("value", script.getLogicalName());
|
||||
item.appendChild(tempitem);
|
||||
tempitem = document.createElement("description");
|
||||
tempitem.appendChild(document.createTextNode(script.getLogicalName()));
|
||||
item.appendChild(tempitem);
|
||||
root.appendChild(item);
|
||||
|
||||
item = document.createElement("logicalname");
|
||||
item.setAttribute("value", script.getLogicalName());
|
||||
root.appendChild(item);
|
||||
|
||||
item = document.createElement("functionname");
|
||||
item.setAttribute("value", script.getLanguageName());
|
||||
root.appendChild(item);
|
||||
|
||||
if (languagedepprops != null && languagedepprops.size() != 0) {
|
||||
String key;
|
||||
item = document.createElement("languagedepprops");
|
||||
|
||||
Iterator iter = languagedepprops.keySet().iterator();
|
||||
while (iter.hasNext()) {
|
||||
tempitem = document.createElement("prop");
|
||||
key = (String)iter.next();
|
||||
tempitem.setAttribute("name", key);
|
||||
tempitem.setAttribute("value", (String)languagedepprops.get(key));
|
||||
item.appendChild(tempitem);
|
||||
}
|
||||
root.appendChild(item);
|
||||
}
|
||||
|
||||
//add to the Top Element
|
||||
main.appendChild(root);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user