/* * Copyright (c) 2012 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.projects.war.components; import java.io.File; import java.util.ArrayList; import java.util.List; import org.apache.wicket.AttributeModifier; import org.apache.wicket.markup.html.WebComponent; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.DownloadLink; import org.apache.wicket.markup.html.link.Link; import org.apache.wicket.markup.html.list.ListItem; import org.apache.wicket.markup.html.list.ListView; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.LoadableDetachableModel; import org.apache.wicket.spring.injection.annot.SpringBean; import eu.esdihumboldt.hale.common.core.io.project.ProjectInfo; import eu.esdihumboldt.hale.server.projects.ProjectScavenger; import eu.esdihumboldt.hale.server.projects.ProjectScavenger.Status; /** * Project list. * * @author Simon Templer */ public class ProjectList extends Panel { private static final long serialVersionUID = -6939011129125355533L; // private static final ALogger log = ALoggerFactory.getLogger(ProjectList.class); @SpringBean private ProjectScavenger projects; /** * Constructor * * @param id the panel id * @param showCaption if the caption shall be shown */ public ProjectList(String id, boolean showCaption) { super(id); // projects list final IModel<? extends List<String>> projectsModel = new LoadableDetachableModel<List<String>>() { private static final long serialVersionUID = 7277175702043541004L; @Override protected List<String> load() { return new ArrayList<String>(projects.getResources()); } }; final ListView<String> projectList = new ListView<String>("projects", projectsModel) { private static final long serialVersionUID = -6740090246572869212L; /** * @see ListView#populateItem(ListItem) */ @Override protected void populateItem(ListItem<String> item) { final boolean odd = item.getIndex() % 2 != 0; if (odd) { item.add(AttributeModifier.replace("class", "odd")); } final String id = item.getModelObject(); // identifier item.add(new Label("identifier", id)); // status Status status = projects.getStatus(id); String statusImagePath; String statusTitle; switch (status) { case ACTIVE: statusImagePath = "images/ok.png"; statusTitle = "Active"; break; case INACTIVE: statusImagePath = "images/sleeping.gif"; statusTitle = "Inactive"; break; case BROKEN: statusImagePath = "images/error.gif"; statusTitle = "Project cannot be loaded"; break; case NOT_AVAILABLE: default: statusImagePath = "images/unknown.gif"; statusTitle = "Project file missing or not set"; } WebComponent statusImage = new WebComponent("status"); statusImage.add(AttributeModifier.replace("src", statusImagePath)); statusImage.add(AttributeModifier.replace("title", statusTitle)); item.add(statusImage); // action String actionImagePath; String actionTitle; boolean showAction; Link<?> actionLink; switch (status) { case ACTIVE: actionTitle = "Stop"; actionImagePath = "images/stop.gif"; showAction = true; actionLink = new Link<Void>("action") { private static final long serialVersionUID = 393941411843332519L; @Override public void onClick() { projects.deactivate(id); } }; break; case BROKEN: case NOT_AVAILABLE: actionTitle = "Rescan"; actionImagePath = "images/refresh.gif"; showAction = true; actionLink = new Link<Void>("action") { private static final long serialVersionUID = -4403828305588875839L; @Override public void onClick() { projects.triggerScan(); } }; break; case INACTIVE: default: actionTitle = "Start"; actionImagePath = "images/start.gif"; showAction = status.equals(Status.INACTIVE); actionLink = new Link<Void>("action") { private static final long serialVersionUID = 393941411843332519L; @Override public void onClick() { projects.activate(id); } }; break; } WebComponent actionImage = new WebComponent("image"); actionImage.add(AttributeModifier.replace("src", actionImagePath)); actionImage.add(AttributeModifier.replace("title", actionTitle)); actionLink.add(actionImage); actionLink.setVisible(showAction); item.add(actionLink); // name String projectName = ""; ProjectInfo info = projects.getInfo(id); if (info != null) { projectName = info.getName(); } item.add(new Label("name", projectName)); // download log File logFile = projects.getLoadReports(id); DownloadLink log = new DownloadLink("log", logFile, id + ".log"); log.setVisible(logFile != null && logFile.exists()); WebComponent logImage = new WebComponent("image"); if (status == Status.BROKEN) { logImage.add(AttributeModifier.replace("src", "images/error_log.gif")); } log.add(logImage); item.add(log); } }; add(projectList); boolean noProjects = projectsModel.getObject().isEmpty(); // caption WebMarkupContainer caption = new WebMarkupContainer("caption"); caption.setVisible(showCaption && !noProjects); add(caption); add(new WebMarkupContainer("noprojects").setVisible(noProjects)); } }