/*
* ###
* Framework Web Archive
*
* Copyright (C) 1999 - 2012 Photon Infotech Inc.
*
* Licensed 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 com.photon.phresco.framework.actions;
import java.awt.Desktop;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.bind.JAXBException;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.photon.phresco.commons.FrameworkConstants;
import com.photon.phresco.exception.PhrescoException;
import com.photon.phresco.framework.PhrescoFrameworkFactory;
import com.photon.phresco.framework.api.ProjectAdministrator;
import com.photon.phresco.framework.commons.FrameworkActions;
import com.photon.phresco.framework.commons.FrameworkUtil;
import com.photon.phresco.framework.commons.LogErrorReport;
import com.photon.phresco.util.Utility;
import com.phresco.pom.exception.PhrescoPomException;
import com.phresco.pom.model.Model.Modules;
import com.phresco.pom.util.PomProcessor;
public class FrameworkBaseAction extends ActionSupport implements FrameworkConstants, FrameworkActions {
private static final Logger S_LOGGER = Logger.getLogger(FrameworkBaseAction.class);
private static Boolean debugEnabled = S_LOGGER.isDebugEnabled();
private static final long serialVersionUID = 1L;
private ProjectAdministrator projectAdministrator = null;
private String path = null;
private String copyToClipboard = null;
public ProjectAdministrator getProjectAdministrator() throws PhrescoException {
if(projectAdministrator == null) {
projectAdministrator = PhrescoFrameworkFactory.getProjectAdministrator();
}
return projectAdministrator;
}
public HttpServletRequest getHttpRequest() {
return (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
}
public HttpSession getHttpSession() {
return getHttpRequest().getSession();
}
public void openFolder() {
if (debugEnabled) {
S_LOGGER.debug("Entered FrameworkBaseAction.openFolder()");
}
try {
if (Desktop.isDesktopSupported()) {
File dir = new File(Utility.getProjectHome() + path);
if(dir.exists()){
Desktop.getDesktop().open(new File(Utility.getProjectHome() + path));
}else{
Desktop.getDesktop().open(new File(Utility.getProjectHome()));
}
}
} catch (Exception e) {
if (debugEnabled) {
S_LOGGER.error("Unable to open the Path, " + FrameworkUtil.getStackTraceAsString(e));
new LogErrorReport(e, "Open Folder");
}
}
}
public void copyPath() {
if (debugEnabled) {
S_LOGGER.debug("Entered FrameworkBaseAction.copyPath");
}
File dir = new File(Utility.getProjectHome() + path);
if(dir.exists()){
copyToClipboard = Utility.getProjectHome() + path;
}else{
copyToClipboard = Utility.getProjectHome();
}
copyToClipboard ();
}
public void copyToClipboard () {
S_LOGGER.debug("Entered FrameworkBaseAction.copyToClipboard");
Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
clipboard.setContents(new StringSelection(copyToClipboard.replaceAll(" ", "").replaceAll("(?m)^[ \t]*\r?\n", "")), null);
}
protected List<String> getProjectModules(String projectCode) {
try {
StringBuilder builder = getProjectHome(projectCode);
builder.append(File.separatorChar);
builder.append(POM_XML);
File pomPath = new File(builder.toString());
PomProcessor processor = new PomProcessor(pomPath);
Modules pomModule = processor.getPomModule();
if (pomModule != null) {
return pomModule.getModule();
}
} catch (JAXBException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (PhrescoPomException e) {
e.printStackTrace();
}
return null;
}
private StringBuilder getProjectHome(String projectCode) {
StringBuilder builder = new StringBuilder(Utility.getProjectHome());
builder.append(projectCode);
return builder;
}
protected List<String> getWarProjectModules(String projectCode) throws JAXBException, IOException, ArrayIndexOutOfBoundsException, PhrescoPomException {
List<String> projectModules = getProjectModules(projectCode);
List<String> warModules = new ArrayList<String>(5);
if (CollectionUtils.isNotEmpty(projectModules)) {
for (String projectModule : projectModules) {
StringBuilder pathBuilder = getProjectHome(projectCode);
pathBuilder.append(File.separatorChar);
pathBuilder.append(projectModule);
pathBuilder.append(File.separatorChar);
pathBuilder.append(POM_XML);
PomProcessor processor = new PomProcessor(new File(pathBuilder.toString()));
String packaging = processor.getModel().getPackaging();
if (StringUtils.isNotEmpty(packaging) && WAR.equalsIgnoreCase(packaging)) {
warModules.add(projectModule);
}
}
}
return warModules;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getCopyToClipboard() {
return copyToClipboard;
}
public void setCopyToClipboard(String copyToClipboard) {
this.copyToClipboard = copyToClipboard;
}
}