/*
* $Id: ArticleActionURIHandler.java,v 1.12 2008/04/26 01:00:02 valdas Exp $
* Created on Jan 31, 2005
*
* Copyright (C) 2005 Idega Software hf. All Rights Reserved.
*
* This software is the proprietary information of Idega hf.
* Use is subject to license terms.
*/
package com.idega.block.article.business;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;
import com.idega.block.article.component.ArticleDeleter;
import com.idega.block.article.component.ArticleEditor;
import com.idega.builder.bean.AdvancedProperty;
import com.idega.content.business.ContentConstants;
import com.idega.content.presentation.ContentViewer;
import com.idega.core.builder.business.BuilderService;
import com.idega.core.builder.business.BuilderServiceFactory;
import com.idega.core.uri.DefaultIWActionURIHandler;
import com.idega.core.uri.IWActionURI;
import com.idega.core.uri.IWActionURIHandler;
import com.idega.idegaweb.IWMainApplication;
/**
* <p>
* An IWActionURIHandler handler that handles the actions for the article module (edit/delete).
* </p>
* Last modified: $Date: 2008/04/26 01:00:02 $ by $Author: valdas $
*
*
* @author <a href="mailto:eiki@idega.com">eiki</a>
* @version $Revision: 1.12 $
*/
public class ArticleActionURIHandler extends DefaultIWActionURIHandler implements IWActionURIHandler {
public static final String HANDLER_IDENTIFIER="article";
/**
*
*/
public ArticleActionURIHandler() {
super();
}
/* (non-Javadoc)
* @see com.idega.core.uri.IWActionURIHandler#canHandleIWActionURI(com.idega.core.uri.IWActionURI)
*/
public boolean canHandleIWActionURI(IWActionURI uri) {
if(getHandlerIdentifier().equals(uri.getHandlerIdentifier())){
return true;
}
return uri.toString().indexOf(".article/")>=0;
}
public String getHandlerIdentifier(){
return HANDLER_IDENTIFIER;
}
/* (non-Javadoc)
* @see com.idega.core.uri.IWActionURIHandler#getRedirectURI(com.idega.core.uri.IWActionURI)
*/
public String getRedirectURI(IWActionURI uri) {
//todo set to previewer or editor depending on action
//todo register actions as subnodes of article
String action = uri.getActionPart();
String pathPart = uri.getPathPart();
StringBuffer redirectURI = new StringBuffer();
redirectURI.append(uri.getContextURI());
if ("preview".equals(action)) {
redirectURI.append(ContentConstants.PAGES_START_URI_WITHOUT_FIRST_SLASH).append(ContentConstants.ARTICLE_VIEWER_URI);
redirectURI.append("?");
}
else if (action.equals(ContentConstants.CONTENT_ITEM_ACTION_EDIT) || action.equals(ContentConstants.CONTENT_ITEM_ACTION_CREATE)) {
return addQueryPart(uri, new StringBuffer(getBuilderService().getUriToObject(ArticleEditor.class, getDefaultParameters(pathPart, action)))).toString();
}
else if (action.equals(ContentConstants.CONTENT_ITEM_ACTION_DELETE)) {
return addQueryPart(uri, new StringBuffer(getBuilderService().getUriToObject(ArticleDeleter.class, getDefaultParameters(pathPart, action)))).toString();
}
else {
redirectURI.append("workspace/content/article/");
redirectURI.append(action);
redirectURI.append("/?");
}
if(pathPart!=null && !pathPart.equals("")){
redirectURI.append(ContentViewer.PARAMETER_CONTENT_RESOURCE);
redirectURI.append("=");
redirectURI.append(pathPart);
redirectURI.append("&");
}
redirectURI.append(ContentViewer.PARAMETER_ACTION);
redirectURI.append("=");
redirectURI.append(action);
return addQueryPart(uri, redirectURI).toString();
}
private List<AdvancedProperty> getDefaultParameters(String pathPart, String action) {
List<AdvancedProperty> parameters = new ArrayList<AdvancedProperty>();
parameters.add(new AdvancedProperty(ContentViewer.PARAMETER_CONTENT_RESOURCE, pathPart));
parameters.add(new AdvancedProperty(ContentViewer.PARAMETER_ACTION, action));
return parameters;
}
private BuilderService getBuilderService() {
try {
return BuilderServiceFactory.getBuilderService(IWMainApplication.getDefaultIWApplicationContext());
} catch (RemoteException e) {
e.printStackTrace();
}
return null;
}
private StringBuffer addQueryPart(IWActionURI uri, StringBuffer redirectURI) {
String queryString = uri.getQueryString();
if (queryString == null) {
return redirectURI;
}
if (!queryString.startsWith("&")) {
if (queryString.startsWith("?")) {
queryString = queryString.substring(1);
}
redirectURI.append("&");
}
redirectURI.append(queryString);
return redirectURI;
}
/* (non-Javadoc)
* @see com.idega.core.uri.IWActionURIHandler#getIWActionURI(java.lang.String)
*/
public IWActionURI getIWActionURI(String requestURI,String queryString) {
return new ArticleIWActionURI(requestURI,queryString);
}
}