blob: 466ee6091e193c0077cf647fbb46560a29c2a1ae [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.oodt.cas.catalog.server.channel.xmlrpc;
//JDK imports
import java.io.File;
import java.io.FileInputStream;
import java.net.URL;
import java.util.List;
import java.util.Properties;
import java.util.Set;
import java.util.Vector;
//OODT imports
import org.apache.oodt.cas.catalog.metadata.TransactionalMetadata;
import org.apache.oodt.cas.catalog.page.CatalogReceipt;
import org.apache.oodt.cas.catalog.page.Page;
import org.apache.oodt.cas.catalog.page.PageInfo;
import org.apache.oodt.cas.catalog.page.QueryPager;
import org.apache.oodt.cas.catalog.page.TransactionReceipt;
import org.apache.oodt.cas.catalog.query.QueryExpression;
import org.apache.oodt.cas.catalog.server.channel.AbstractCommunicationChannelClient;
import org.apache.oodt.cas.catalog.struct.Dictionary;
import org.apache.oodt.cas.catalog.struct.Index;
import org.apache.oodt.cas.catalog.struct.TransactionId;
import org.apache.oodt.cas.catalog.system.Catalog;
import org.apache.oodt.cas.catalog.util.PluginURL;
import org.apache.oodt.cas.metadata.Metadata;
//APACHE imports
import org.apache.xmlrpc.CommonsXmlRpcTransportFactory;
import org.apache.xmlrpc.XmlRpcClient;
/**
* @author bfoster
* @version $Revision$
*
* <p>
* A Communication Channel Client over XML-RPC
* <p>
*/
public class XmlRpcCommunicationChannelClient extends AbstractCommunicationChannelClient {
protected XmlRpcClient client;
protected int chunkSize;
public XmlRpcCommunicationChannelClient(URL serverUrl, int connectionTimeout, int requestTimeout, int chunkSize) {
super();
CommonsXmlRpcTransportFactory transportFactory = new CommonsXmlRpcTransportFactory(serverUrl);
transportFactory.setConnectionTimeout(connectionTimeout * 60 * 1000);
transportFactory.setTimeout(requestTimeout * 60 * 1000);
this.client = new XmlRpcClient(serverUrl, transportFactory);
this.chunkSize = chunkSize;
}
public void shutdown() throws Exception {
Vector<Object> args = new Vector<Object>();
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_shutdown", args);
}
public void addCatalog(Catalog catalog) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalog));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addCatalog", args);
}
public void replaceCatalog(Catalog catalog) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalog));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_replaceCatalog", args);
}
public void addCatalog(String catalogId, Index index) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(index));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addCatalog", args);
}
public void addCatalog(String catalogId, Index index, List<Dictionary> dictionaries) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(index));
args.add(this.serializer.serializeObject(dictionaries));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addCatalog", args);
}
public void addCatalog(String catalogId, Index index, List<Dictionary> dictionaries, boolean restrictQueryPermission, boolean restrictIngestPermission) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(index));
args.add(this.serializer.serializeObject(dictionaries));
args.add(restrictQueryPermission);
args.add(restrictIngestPermission);
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addCatalog", args);
}
public void addDictionary(String catalogId, Dictionary dictionary) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(dictionary));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addDictionary", args);
}
public void replaceDictionaries(String catalogId, List<Dictionary> dictionaries) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(dictionaries));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addDictionary", args);
}
public void replaceIndex(String catalogId, Index index) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(index));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_replaceIndex", args);
}
public void modifyIngestPermission(String catalogId, boolean restrictIngestPermission) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(restrictIngestPermission));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_modifyIngestPermission", args);
}
public void modifyQueryPermission(String catalogId, boolean restrictQueryPermission) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogId);
args.add(this.serializer.serializeObject(restrictQueryPermission));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_modifyQueryPermission", args);
}
public List<PluginURL> getPluginUrls() throws Exception {
Vector<Object> args = new Vector<Object>();
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getPluginUrls", args));
}
public void addPluginUrls(List<PluginURL> pluginURLs) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(pluginURLs));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_addPluginUrls", args);
}
public URL getPluginStorageDir() throws Exception {
Vector<Object> args = new Vector<Object>();
return this.serializer.deserializeObject(URL.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getPluginStorageDir", args));
}
public void transferUrl(URL fromUrl, URL toURL) throws Exception {
System.out.println("Transfering '" + fromUrl + "' to '" + toURL + "'");
FileInputStream is = null;
try {
byte[] buf = new byte[this.chunkSize];
is = new FileInputStream(new File(fromUrl.getPath()));
int offset = 0;
int numBytes = 0;
while ((numBytes = is.read(buf, offset, chunkSize)) != -1)
this.transferFile(new File(toURL.getPath()).getAbsolutePath(), buf, offset, numBytes);
}catch (Exception e) {
throw e;
}finally {
try {
is.close();
}catch(Exception e) {}
}
}
protected void transferFile(String filePath, byte[] fileData, int offset,
int numBytes) throws Exception {
Vector<Object> argList = new Vector<Object>();
argList.add(filePath);
argList.add(fileData);
argList.add(new Integer(offset));
argList.add(new Integer(numBytes));
client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_transferFile", argList);
}
public void delete(Metadata metadata) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(metadata));
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_delete", args);
}
public List<TransactionalMetadata> getAllPages(QueryPager queryPager) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryPager));
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getAllPages", args));
}
public Properties getCalalogProperties() throws Exception {
return this.serializer.deserializeObject(Properties.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCalalogProperties", new Vector<Object>()));
}
public Properties getCalalogProperties(String catalogUrn)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogUrn);
return this.serializer.deserializeObject(Properties.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCalalogProperties", args));
}
// public Catalog getCatalog(String catalogUrn) throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(catalogUrn);
// return this.serializer.deserializeObject(Catalog.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCatalog", args));
// }
// public CatalogRepository getCatalogRepository()
// throws Exception {
// return this.serializer.deserializeObject(CatalogRepository.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCatalogRepository", new Vector<Object>()));
// }
public TransactionId<?> getCatalogServiceTransactionId(
TransactionId<?> catalogTransactionId, String catalogUrn)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalogTransactionId));
args.add(catalogUrn);
return this.serializer.deserializeObject(TransactionId.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCatalogServiceTransactionId", args));
}
public TransactionId<?> getCatalogServiceTransactionId(
CatalogReceipt catalogReceipt,
boolean generateNew) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalogReceipt));
args.add(this.serializer.serializeObject(new Boolean(generateNew)));
return this.serializer.deserializeObject(TransactionId.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCatalogServiceTransactionId2", args));
}
public List<TransactionId<?>> getCatalogServiceTransactionIds(
List<TransactionId<?>> catalogTransactionIds, String catalogUrn)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalogTransactionIds));
args.add(catalogUrn);
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCatalogServiceTransactionId", args));
}
public Set<String> getCurrentCatalogIds() throws Exception {
return this.serializer.deserializeObject(Set.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCurrentCatalogIds", new Vector<Object>()));
}
// public Set<Catalog> getCurrentCatalogList() throws Exception {
// return this.serializer.deserializeObject(Set.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getCurrentCatalogList", new Vector<Object>()));
// }
//
// public IngestMapper getIngestMapper() throws Exception {
// return this.serializer.deserializeObject(IngestMapper.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getIngestMapper", new Vector<Object>()));
// }
public List<TransactionalMetadata> getMetadataFromTransactionIdStrings(
List<String> catalogServiceTransactionIdStrings)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalogServiceTransactionIdStrings));
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getMetadataFromTransactionIdStrings", args));
}
public List<TransactionalMetadata> getMetadataFromTransactionIds(
List<TransactionId<?>> catalogServiceTransactionIds)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(catalogServiceTransactionIds));
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getMetadataFromTransactionIds", args));
}
public List<TransactionalMetadata> getNextPage(QueryPager queryPager)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryPager));
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getNextPage", args));
}
public List<String> getProperty(String key) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(key);
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getProperty", args));
}
public Class<? extends TransactionId<?>> getTransactionIdClass() throws Exception {
return this.serializer.deserializeObject(Class.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getTransactionIdClass", new Vector<Object>()));
}
public List<TransactionId<?>> getTransactionIdsForAllPages(
QueryPager queryPager) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryPager));
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getTransactionIdsForAllPages", args));
}
public TransactionReceipt ingest(Metadata metadata)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(metadata));
return this.serializer.deserializeObject(TransactionReceipt.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_ingest", args));
}
public boolean isRestrictIngestPermissions() throws Exception {
return this.serializer.deserializeObject(Boolean.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_isRestrictIngestPermissions", new Vector<Object>()));
}
public boolean isRestrictQueryPermissions() throws Exception {
return this.serializer.deserializeObject(Boolean.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_isRestrictQueryPermissions", new Vector<Object>()));
}
public Page getFirstPage(QueryExpression queryExpression) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryExpression));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getFirstPage", args));
}
public Page getFirstPage(QueryExpression queryExpression, Set<String> catalogIds) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryExpression));
args.add(this.serializer.serializeObject(catalogIds));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getFirstPage", args));
}
public Page getNextPage(Page page) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(page));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getNextPage2", args));
}
public Page getPage(PageInfo pageInfo, QueryExpression queryExpression) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(pageInfo));
args.add(this.serializer.serializeObject(queryExpression));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getPage", args));
}
public Page getPage(PageInfo pageInfo, QueryExpression queryExpression, Set<String> catalogIds) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(pageInfo));
args.add(this.serializer.serializeObject(queryExpression));
args.add(this.serializer.serializeObject(catalogIds));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getPage", args));
}
public Page getLastPage(QueryExpression queryExpression) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryExpression));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getLastPage", args));
}
public Page getLastPage(QueryExpression queryExpression, Set<String> catalogIds) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryExpression));
args.add(this.serializer.serializeObject(catalogIds));
return this.serializer.deserializeObject(Page.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getLastPage", args));
}
public List<TransactionalMetadata> getMetadata(Page page) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(page));
return this.serializer.deserializeObject(List.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_getMetadata", args));
}
public QueryPager query(QueryExpression queryExpression)
throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryExpression));
return this.serializer.deserializeObject(QueryPager.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_query", args));
}
public QueryPager query(QueryExpression queryExpression, Set<String> catalogIds) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(this.serializer.serializeObject(queryExpression));
args.add(this.serializer.serializeObject(catalogIds));
return this.serializer.deserializeObject(QueryPager.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_query", args));
}
// public QueryPager query(QueryExpression queryExpression, boolean sortResults)
// throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(this.serializer.serializeObject(queryExpression));
// args.add(this.serializer.serializeObject(new Boolean(sortResults)));
// return this.serializer.deserializeObject(QueryPager.class, (String) this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_query", args));
// }
public void removeCatalog(String catalogUrn) throws Exception {
Vector<Object> args = new Vector<Object>();
args.add(catalogUrn);
this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_removeCatalog", args);
}
// public void removeCatalog(String catalogUrn, boolean preserveMapping)
// throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(catalogUrn);
// args.add(this.serializer.serializeObject(new Boolean(preserveMapping)));
// this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_removeCatalog", args);
// }
// public void setCatalogRepository(CatalogRepository catalogRepository)
// throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(this.serializer.serializeObject(catalogRepository));
// this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_setCatalogRepository", args);
// }
// public void setHasIngestPermissions(boolean restrictIngestPermissions) throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(this.serializer.serializeObject(new Boolean(restrictIngestPermissions)));
// this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_setHasIngestPermissions", args);
// }
// public void setIngestMapper(IngestMapper ingestMapper) throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(this.serializer.serializeObject(ingestMapper));
// this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_setIngestMapper", args);
// }
// public void setRestrictQueryPermissions(boolean restrictQueryPermissions) throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(this.serializer.serializeObject(new Boolean(restrictQueryPermissions)));
// this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_setRestrictQueryPermissions", args);
// }
// public void setTransactionIdClass(
// Class<? extends TransactionId<?>> transactionIdClass) throws Exception {
// Vector<Object> args = new Vector<Object>();
// args.add(this.serializer.serializeObject(transactionIdClass));
// this.client.execute(XmlRpcCommunicationChannelServer.class.getSimpleName() + ".xmlrpc_setTransactionIdClass", args);
// }
}