blob: 4fa20aedaee70a6317678fa67bd9c6165a9e7989 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and Others
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Masatomo KOBAYASHI - initial API and implementation
*******************************************************************************/
package org.eclipse.actf.ai.navigator.userinfo.impl;
import java.util.Iterator;
import org.eclipse.actf.ai.fennec.treemanager.ITreeItem;
import org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier;
import org.eclipse.actf.ai.navigator.userinfo.IUserInfoConstants;
import org.eclipse.actf.ai.navigator.userinfo.IUserInfoGenerator;
import org.eclipse.actf.ai.navigator.userinfo.IUserInfoGenerator.Result;
import org.eclipse.actf.ai.xmlstore.IXMLEditableInfo;
import org.eclipse.actf.ai.xmlstore.IXMLInfo;
import org.eclipse.actf.ai.xmlstore.IXMLSelector;
import org.eclipse.actf.ai.xmlstore.IXMLStore;
import org.eclipse.actf.ai.xmlstore.IXMLStoreService;
import org.eclipse.actf.ai.xmlstore.XMLStoreException;
import org.eclipse.actf.ai.xmlstore.XMLStoreServiceUtil;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
public class MetaDataModifier implements IUserInfoConstants, IMetaDataModifier {
private IUserInfoGenerator generator;
private ITreeItem item;
private String text;
private String site;
private String pageTitle;
// @Override
// public String toString() {
// StringBuffer ret = new StringBuffer();
// String s = item.getUIString();
// ret.append(generator);
// ret.append(" : ");
// ret.append(s != null && s.length() > 0 ? s : "X");
// ret.append(" is ");
// ret.append(text);
// return ret.toString();
// }
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#toString(org.eclipse.actf.ai.navigator.userinfo.IUserInfoConstants.Result)
*/
public String toString(Result result) {
return generator.toString(result);
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#commit(boolean)
*/
public Result commit(boolean save) throws XMLStoreException {
IXMLEditableInfo info = getUserInfo();
info.setPageTitle(pageTitle);
Result result = Result.NOTHING;
if (generator != null) {
if (item == null) return Result.ERROR;
Document infoDocument = info.getRootNode().getOwnerDocument();
Node parent = infoDocument.getElementsByTagNameNS(DEFAULT_NAMESPACE, "attach").item(0);
// TargetNodeQuery paths = getQueryPaths(parent.getOwnerDocument());
// result = generator.addUserInfo(parent, paths, text);
// Node node = getInfoNode(parent);
Node node = item.serializeQuery(parent);
if (node == null) return Result.ERROR;
result = generator.addUserInfo(node, text);
if (!node.hasChildNodes())
parent.removeChild(node);
}
if (save)
info.save();
return result;
}
private IXMLEditableInfo getUserInfo() throws XMLStoreException {
IXMLStoreService service = XMLStoreServiceUtil.getXMLStoreService();
IXMLEditableInfo info = getStoredUserInfo(service);
if (info != null) {
return info;
} else {
return createNewUserInfo(service);
}
}
private IXMLEditableInfo getStoredUserInfo(IXMLStoreService service) {
IXMLStore store0 = service.getRootStore();
IXMLSelector sel1 = service.getSelectorWithDocElem("fennec", DEFAULT_NAMESPACE);
IXMLStore store1 = store0.specify(sel1);
if (store1 == null)
return null;
IXMLSelector sel2 = service.getSelectorWithURI(site);
IXMLStore store2 = store1.specify(sel2);
if (store2 == null)
return null;
for (Iterator<IXMLInfo> i = store2.getInfoIterator(); i.hasNext(); ) {
IXMLInfo info = i.next();
if (info.isUserEntry() && (info instanceof IXMLEditableInfo)) {
// System.out.println("open stored user info.");
return (IXMLEditableInfo) info;
}
}
return null;
}
private IXMLEditableInfo createNewUserInfo(IXMLStoreService service) throws XMLStoreException {
IXMLEditableInfo info = service.newUserXML(DEFAULT_NAMESPACE, "fennec", site);
info.setPageTitle(pageTitle);
Node root = info.getRootNode();
Document doc = root.getOwnerDocument();
Element node = doc.createElementNS(DEFAULT_NAMESPACE, "attach");
node.setAttributeNS(LOC_NAMESPACE, "loc:path", ".");
root.appendChild(node);
//System.out.println("create new user info.");
return info;
}
public boolean remove() throws XMLStoreException {
IXMLStoreService service = XMLStoreServiceUtil.getXMLStoreService();
IXMLEditableInfo info = getStoredUserInfo(service);
if (info == null) {
return false;
}
info.remove();
return true;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#getSite()
*/
public String getSite() {
return site;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#setSite(java.lang.String)
*/
public void setSite(String targetSite) {
this.site = targetSite;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#getItem()
*/
public ITreeItem getItem() {
return item;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#setItem(org.eclipse.actf.ai.fennec.treemanager.ITreeItem)
*/
public void setItem(ITreeItem item) {
this.item = item;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#getText()
*/
public String getText() {
return text;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#setText(java.lang.String)
*/
public void setText(String text) {
this.text = text;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#getGenerator()
*/
public IUserInfoGenerator getGenerator() {
return generator;
}
/* (non-Javadoc)
* @see org.eclipse.actf.ai.navigator.userinfo.IMetaDataModifier#setGenerator(org.eclipse.actf.ai.navigator.userinfo.IUserInfoGenerator)
*/
public void setGenerator(IUserInfoGenerator generator) {
this.generator = generator;
}
public void setPageTitle(String pageTitle) {
this.pageTitle = pageTitle;
}
}