/*
* Copyright (c) 2013 Data Harmonisation Panel
*
* All rights reserved. This program and the accompanying materials are made
* available under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this distribution. If not, see <http://www.gnu.org/licenses/>.
*
* Contributors:
* Data Harmonisation Panel <http://www.dhpanel.eu>
*/
package eu.esdihumboldt.hale.server.templates.war.pages;
import java.util.Iterator;
import javax.servlet.http.HttpServletResponse;
import org.apache.wicket.request.http.flow.AbortWithHttpErrorCodeException;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
import com.tinkerpop.blueprints.Direction;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;
import de.fhg.igd.slf4jplus.ALogger;
import de.fhg.igd.slf4jplus.ALoggerFactory;
import eu.esdihumboldt.hale.server.db.orient.DatabaseHelper;
import eu.esdihumboldt.hale.server.model.Template;
import eu.esdihumboldt.hale.server.model.User;
import eu.esdihumboldt.hale.server.templates.war.components.TemplateForm;
import eu.esdihumboldt.hale.server.webapp.pages.SecuredPage;
import eu.esdihumboldt.hale.server.webapp.util.PageDescription;
import eu.esdihumboldt.hale.server.webapp.util.UserUtil;
import eu.esdihumboldt.util.blueprints.entities.NonUniqueResultException;
/**
* Page for editing template information.
*
* @author Simon Templer
*/
@PageDescription(title = "Edit Template")
public class EditTemplatePage extends SecuredPage {
private static final long serialVersionUID = 5042784175750862684L;
private static final ALogger log = ALoggerFactory.getLogger(EditTemplatePage.class);
/**
* @see SecuredPage#SecuredPage(PageParameters)
*/
public EditTemplatePage(PageParameters parameters) {
super(parameters);
}
@Override
protected void addControls() {
StringValue idParam = getPageParameters().get(0);
if (!idParam.isNull() && !idParam.isEmpty()) {
String templateId = idParam.toString();
OrientGraph graph = DatabaseHelper.getGraph();
try {
Template template = null;
try {
template = Template.getByTemplateId(graph, templateId);
} catch (NonUniqueResultException e) {
log.error("Duplicate template representation: " + templateId, e);
}
if (template != null) {
// get associated user
Vertex v = template.getV();
Iterator<Vertex> owners = v.getVertices(Direction.OUT, "owner").iterator();
if (UserUtil.isAdmin() // user is admin
// or user is owner
|| (owners.hasNext() && UserUtil.getLogin().equals(
new User(owners.next(), graph).getLogin()))) {
add(new TemplateForm("edit-form", false, templateId));
}
else {
throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_FORBIDDEN);
}
}
else {
throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_NOT_FOUND,
"Template not found.");
}
} finally {
graph.shutdown();
}
}
else
throw new AbortWithHttpErrorCodeException(HttpServletResponse.SC_BAD_REQUEST,
"Template identifier must be specified.");
}
}