/**
*
*/
package org.squidy;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.basex.BaseXServer;
import org.basex.core.BaseXException;
import org.basex.server.ClientSession;
import org.squidy.database.BaseXSessionProvider;
import org.squidy.designer.model.Data;
import org.squidy.designer.model.ModelViewHandler;
/**
* <code>BaseXStorage</code>.
*
* <pre>
* Date: Dec 1, 2010
* Time: 11:54:01 AM
* </pre>
*
*
* @author Roman R�dle <a
* href="mailto:Roman.Raedle@uni-konstanz.de">Roman.Raedle
* @uni-konstanz.de</a> Human-Computer Interaction Group University of Konstanz
*
* @version $Id: BaseXStorage.java 772 2011-09-16 15:39:44Z raedle $
* @since 1.5.0
*/
public class BaseXStorage implements Storage {
// Logger to log info, error, debug,... messages.
private static final Log LOG = LogFactory.getLog(BaseXStorage.class);
private static BaseXServer server;
/* (non-Javadoc)
* @see org.squidy.Storage#getIdentifier()
*/
public String getIdentifier() {
return "BaseX <" + System.getProperty("db") + ">";
}
/* (non-Javadoc)
* @see org.squidy.Storage#isAutomatedStorageActive()
*/
public boolean isAutomatedStorageActive() {
return false;
}
/* (non-Javadoc)
* @see org.squidy.Storage#store(org.squidy.designer.model.Data)
*/
public void store(Data data) {
// System.out.println("STORE DATA");
ByteArrayOutputStream out = new ByteArrayOutputStream();
ModelViewHandler.getModelViewHandler().save(out, data);
String xml = out.toString();
xml = xml.substring(55, xml.length()).trim();
try {
BaseXSessionProvider.get().getSession().execute("xquery declare namespace common='http://hci.uni-konstanz.de/squidy/common'; replace node /common:Data with " + xml);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/* (non-Javadoc)
* @see org.squidy.Storage#restore()
*/
public Data restore() {
try {
return ModelViewHandler.getModelViewHandler().load(queryWorkspace());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
private InputStream queryWorkspace() throws IOException {
// int option = JOptionPane.showOptionDialog(Designer.getInstance(), "Choose Database", "Choice", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, val2, val2[0]);
//
// ByteArrayOutputStream out = new ByteArrayOutputStream();
//
// workspace = val2[option].replaceAll("\"", "").trim();
//
// session.execute(new XQuery("declare namespace common='http://hci.uni-konstanz.de/squidy/common';"
// + "for $x in /common:workspaces/*[@name='" + workspace + "']"
// + "return $x"), out);
StringBuilder sb = new StringBuilder("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
sb.append(System.getProperty("line.separator"));
// session.execute(new XQuery("declare namespace common='http://hci.uni-konstanz.de/squidy/common';" +
// "declare namespace manager='http://hci.uni-konstanz.de/squidy/manager';" +
// "declare namespace designer='http://hci.uni-konstanz.de/squidy/designer';" +
// "declare namespace basic='http://hci.uni-konstanz.de/squidy/extension/basic';" +
// "/*"), out);
String result = BaseXSessionProvider.get().getSession().execute("xquery /*");
sb.append(result);
// WorkspaceConnectionService.get().getSession().execute(new XQuery("/*"), out);
// System.out.println("ANSWER: " + out.toString());
return new ByteArrayInputStream(sb.toString().getBytes());
}
}