/*
* eXist Open Source Native XML Database
* Copyright (C) 2001-2015 The eXist Project
* http://exist-db.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.exist.xmldb;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.xmlrpc.client.XmlRpcClient;
import org.apache.xmlrpc.XmlRpcException;
import org.w3c.dom.Document;
import org.xmldb.api.base.Collection;
import org.xmldb.api.base.ErrorCodes;
import org.xmldb.api.base.XMLDBException;
public class RemoteCollectionManagementService extends AbstractRemote implements CollectionManagementServiceImpl {
final XmlRpcClient client;
public RemoteCollectionManagementService(final RemoteCollection parent, final XmlRpcClient client) {
super(parent);
this.client = client;
}
@Override
public String getName() throws XMLDBException {
return "CollectionManagementService";
}
@Override
public String getVersion() throws XMLDBException {
return "1.0";
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#createCollection(org.exist.xmldb.XmldbURI)}
*/
@Deprecated
@Override
public Collection createCollection(final String collName) throws XMLDBException {
return createCollection(collName, (Date) null);
}
@Override
public Collection createCollection(final XmldbURI collName) throws XMLDBException {
return createCollection(collName, null);
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#createCollection(org.exist.xmldb.XmldbURI, java.util.Date)}
*/
@Deprecated
@Override
public Collection createCollection(final String collName, final Date created) throws XMLDBException {
try {
return createCollection(XmldbURI.xmldbUriFor(collName), created);
} catch (final URISyntaxException e) {
throw new XMLDBException(ErrorCodes.INVALID_URI, e);
}
}
@Override
public Collection createCollection(final XmldbURI name, final Date created) throws XMLDBException {
final XmldbURI collName = resolve(name);
final List<Object> params = new ArrayList<>();
params.add(collName.toString());
if (created != null) {
params.add(created);
}
try {
client.execute("createCollection", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR, xre.getMessage(), xre);
}
return collection.getChildCollection(collName);
}
/**
* Implements createCollection from interface CollectionManager. Gets
* called by some applications based on Xindice.
*
* @param path Description of the Parameter
* @param configuration Description of the Parameter
* @return Description of the Return Value
* @throws XMLDBException Description of the Exception
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#createCollection(org.exist.xmldb.XmldbURI)}
*/
@Deprecated
public Collection createCollection(final String path, final Document configuration)
throws XMLDBException {
return createCollection(path);
}
@Override
public String getProperty(final String property) {
return null;
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#removeCollection(org.exist.xmldb.XmldbURI)}
*/
@Deprecated
@Override
public void removeCollection(final String collName) throws XMLDBException {
try {
removeCollection(XmldbURI.xmldbUriFor(collName));
} catch (final URISyntaxException e) {
throw new XMLDBException(ErrorCodes.INVALID_URI, e);
}
}
@Override
public void removeCollection(final XmldbURI name) throws XMLDBException {
final XmldbURI collName = resolve(name);
final List<Object> params = new ArrayList<>();
params.add(collName.toString());
try {
client.execute("removeCollection", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR, xre.getMessage(), xre);
}
}
@Override
public void setCollection(final Collection parent) throws XMLDBException {
this.collection = (RemoteCollection) parent;
}
@Override
public void setProperty(final String name, final String value) {
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#move(org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI)}
*/
@Deprecated
@Override
public void move(final String collectionPath, final String destinationPath, final String newName) throws XMLDBException {
try {
move(XmldbURI.xmldbUriFor(collectionPath), XmldbURI.xmldbUriFor(destinationPath), XmldbURI.xmldbUriFor(newName));
} catch (final URISyntaxException e) {
throw new XMLDBException(ErrorCodes.INVALID_URI, e);
}
}
@Deprecated
@Override
public void move(final XmldbURI src, final XmldbURI dest, final XmldbURI name) throws XMLDBException {
final XmldbURI srcPath = resolve(src);
final XmldbURI destPath = dest == null ? srcPath.removeLastSegment() : resolve(dest);
final XmldbURI newName;
if (name == null) {
newName = srcPath.lastSegment();
} else {
newName = name;
}
final List<Object> params = new ArrayList<>();
params.add(srcPath.toString());
params.add(destPath.toString());
params.add(newName.toString());
try {
client.execute("moveCollection", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR, xre.getMessage(), xre);
}
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#moveResource(org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI)}
*/
@Deprecated
@Override
public void moveResource(final String resourcePath, final String destinationPath,
final String newName) throws XMLDBException {
try {
moveResource(XmldbURI.xmldbUriFor(resourcePath), XmldbURI.xmldbUriFor(destinationPath), XmldbURI.xmldbUriFor(newName));
} catch (final URISyntaxException e) {
throw new XMLDBException(ErrorCodes.INVALID_URI, e);
}
}
@Override
public void moveResource(final XmldbURI src, final XmldbURI dest, final XmldbURI name)
throws XMLDBException {
final XmldbURI srcPath = resolve(src);
final XmldbURI destPath = dest == null ? srcPath.removeLastSegment() : resolve(dest);
final XmldbURI newName;
if (name == null) {
newName = srcPath.lastSegment();
} else {
newName = name;
}
final List<Object> params = new ArrayList<>();
params.add(srcPath.toString());
params.add(destPath.toString());
params.add(newName.toString());
try {
client.execute("moveResource", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR,
xre.getMessage(),
xre);
}
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#copy(org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI)}
*/
@Deprecated
@Override
public void copy(final String collectionPath, final String destinationPath,
final String newName) throws XMLDBException {
try {
copy(XmldbURI.xmldbUriFor(collectionPath), XmldbURI.xmldbUriFor(destinationPath), XmldbURI.xmldbUriFor(newName));
} catch (final URISyntaxException e) {
throw new XMLDBException(ErrorCodes.INVALID_URI, e);
}
}
@Override
public void copy(final XmldbURI src, final XmldbURI dest, final XmldbURI name) throws XMLDBException {
final XmldbURI srcPath = resolve(src);
final XmldbURI destPath = dest == null ? srcPath.removeLastSegment() : resolve(dest);
final XmldbURI newName;
if (name == null) {
newName = srcPath.lastSegment();
} else {
newName = name;
}
final List<Object> params = new ArrayList<>();
params.add(srcPath.toString());
params.add(destPath.toString());
params.add(newName.toString());
try {
client.execute("copyCollection", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR,
xre.getMessage(),
xre);
}
}
/**
* @deprecated {@link org.exist.xmldb.RemoteCollectionManagementService#copy(org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI, org.exist.xmldb.XmldbURI)}
*/
@Deprecated
@Override
public void copyResource(final String resourcePath, final String destinationPath,
final String newName) throws XMLDBException {
try {
copyResource(XmldbURI.xmldbUriFor(resourcePath), XmldbURI.xmldbUriFor(destinationPath), XmldbURI.xmldbUriFor(newName));
} catch (final URISyntaxException e) {
throw new XMLDBException(ErrorCodes.INVALID_URI, e);
}
}
@Override
public void copyResource(final XmldbURI src, final XmldbURI dest, final XmldbURI name)
throws XMLDBException {
final XmldbURI srcPath = resolve(src);
final XmldbURI destPath = dest == null ? srcPath.removeLastSegment() : resolve(dest);
final XmldbURI newName;
if (name == null) {
newName = srcPath.lastSegment();
} else {
newName = name;
}
final List<Object> params = new ArrayList<>();
params.add(srcPath.toString());
params.add(destPath.toString());
params.add(newName.toString());
try {
client.execute("copyResource", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR,
xre.getMessage(),
xre);
}
}
@Override
public void runCommand(final String[] cmdParams) throws XMLDBException {
final List<Object> params = new ArrayList<>();
params.add(collection.getPathURI());
params.add(cmdParams);
try {
client.execute("runCommand", params);
} catch (final XmlRpcException xre) {
throw new XMLDBException(ErrorCodes.VENDOR_ERROR,
xre.getMessage(),
xre);
}
}
}