package com.intuit.tank.script;
/*
* #%L
* JSF Support Beans
* %%
* Copyright (C) 2011 - 2015 Intuit Inc.
* %%
* 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
* #L%
*/
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.enterprise.event.Event;
import javax.faces.model.SelectItem;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.picketlink.Identity;
import org.picketlink.idm.IdentityManager;
import org.picketlink.idm.model.basic.User;
import com.intuit.tank.ModifiedScriptMessage;
import com.intuit.tank.PreferencesBean;
import com.intuit.tank.auth.Security;
import com.intuit.tank.common.ScriptUtil;
import com.intuit.tank.dao.ScriptDao;
import com.intuit.tank.prefs.TablePreferences;
import com.intuit.tank.project.Script;
import com.intuit.tank.qualifier.Modified;
import com.intuit.tank.util.ExceptionHandler;
import com.intuit.tank.util.Messages;
import com.intuit.tank.util.Multiselectable;
import com.intuit.tank.view.filter.ViewFilterType;
import com.intuit.tank.vm.settings.AccessRight;
import com.intuit.tank.wrapper.SelectableBean;
import com.intuit.tank.wrapper.SelectableWrapper;
import com.intuit.tank.wrapper.VersionContainer;
@Named
@ViewScoped
public class ScriptBean extends SelectableBean<Script> implements Serializable, Multiselectable<Script> {
private static final long serialVersionUID = 1L;
private static final Logger LOG = LogManager.getLogger(ScriptBean.class);
@Inject
private ScriptLoader scriptLoader;
@Inject
private Identity identity;
@Inject
private IdentityManager identityManager;
@Inject
private Security security;
@Inject
private Messages messages;
@Inject
private ExceptionHandler exceptionHandler;
@Inject
@Modified
private Event<ModifiedScriptMessage> scriptEvent;
private SelectableWrapper<Script> selectedScript;
private int version;
@Inject
private PreferencesBean userPrefs;
private TablePreferences stepTablePrefs;
private String saveAsName;
/**
* @return the saveAsName
*/
public String getSaveAsName() {
return saveAsName;
}
/**
* @param saveAsName
* the saveAsName to set
*/
public void setSaveAsName(String saveAsName) {
this.saveAsName = saveAsName;
}
@PostConstruct
public void init() {
tablePrefs = new TablePreferences(userPrefs.getPreferences().getScriptsTableColumns());
stepTablePrefs = new TablePreferences(userPrefs.getPreferences().getScriptStepTableColumns());
tablePrefs.registerListener(userPrefs);
}
/**
* @return the stepTablePrefs
*/
public TablePreferences getStepTablePrefs() {
return stepTablePrefs;
}
/**
* @param stepTablePrefs
* the selectedScript to set
*/
public void setStepTablePrefs(TablePreferences stepTablePrefs) {
this.stepTablePrefs = stepTablePrefs;
}
/**
* @return the selectedScript
*/
public SelectableWrapper<Script> getSelectedScript() {
return selectedScript;
}
/**
* @param selectedScript
* the selectedScript to set
*/
public void setSelectedScript(SelectableWrapper<Script> selectedScript) {
this.selectedScript = selectedScript;
this.saveAsName = selectedScript.getEntity().getName();
}
/**
*
* @{inheritDoc
*/
public void delete(Script script) {
if (!security.hasRight(AccessRight.DELETE_SCRIPT) && !security.isOwner(script)) {
messages.warn("You do not have permission to delete this script.");
} else {
try {
new ScriptDao().delete(script.getId());
scriptEvent.fire(new ModifiedScriptMessage(script, this));
} catch (Exception e) {
LOG.error("Error deleting Script: " + e.toString());
exceptionHandler.handle(e);
}
}
}
/**
* @{inheritDoc
*/
@Override
public List<Script> getEntityList(ViewFilterType viewFilter) {
VersionContainer<Script> container = scriptLoader.getVersionContainer(viewFilter);
this.version = container.getVersion();
return container.getEntities();
}
/**
* @{inheritDoc
*/
@Override
public boolean isCurrent() {
return scriptLoader.isCurrent(version);
}
/**
* @return the creatorList
*/
public SelectItem[] getCreatorList() {
return scriptLoader.getCreatorList();
}
public void saveAs(Script script) {
if (StringUtils.isEmpty(saveAsName)) {
messages.error("You must give the script a name.");
return;
}
try {
String originalName = script.getName();
if (originalName.equals(saveAsName)) {
messages.error("You did not change the script name.");
return;
} else {
Script copyScript = ScriptUtil.copyScript(
identityManager.lookupById(User.class, identity.getAccount().getId()).getLoginName(),
saveAsName, script);
copyScript = new ScriptDao().saveOrUpdate(copyScript);
scriptEvent.fire(new ModifiedScriptMessage(copyScript, this));
messages.info("Script " + originalName + " has been saved as "
+ copyScript.getName() + ".");
}
} catch (Exception e) {
messages.error(e.getMessage());
}
}
}