/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* 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
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.view.internal.window;
import java.util.Set;
import java.util.TreeSet;
import org.eclipse.skalli.model.Project;
import org.eclipse.skalli.services.Services;
import org.eclipse.skalli.services.entity.EntityServices;
import org.eclipse.skalli.services.permit.PermitService;
import org.eclipse.skalli.services.project.ProjectService;
import org.eclipse.skalli.services.template.ProjectTemplate;
import org.eclipse.skalli.services.template.ProjectTemplateService;
import org.eclipse.skalli.view.component.RadioSelect;
import org.eclipse.skalli.view.ext.Navigator;
import org.eclipse.skalli.view.ext.ProjectEditMode;
import org.eclipse.skalli.view.internal.application.ProjectApplication;
import com.vaadin.terminal.ThemeResource;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.VerticalLayout;
public class NewProjectPanel extends Panel implements ProjectPanel {
private static final long serialVersionUID = 4432418022051563046L;
private static final String STYLE_TEMPLATE_SELECT = "tplsel"; //$NON-NLS-1$
private static final String STYLE_TEMPLATE_SELECT_BUTTONS = "tplsel-buttons"; //$NON-NLS-1$
private static final String DEBUG_ID_CONTENT = "templateSelectPanelContent"; //$NON-NLS-1$
private final ThemeResource ICON_BUTTON_OK = new ThemeResource("icons/button/ok.png"); //$NON-NLS-1$
private final ThemeResource ICON_BUTTON_CANCEL = new ThemeResource("icons/button/cancel.png"); //$NON-NLS-1$
private final ProjectApplication application;
private final Navigator navigator;
private final ProjectWindow window;
private RadioSelect select;
private final Set<ProjectTemplate> projectTemplates;
public NewProjectPanel(ProjectApplication application, ProjectWindow window, Navigator navigator) {
this.application = application;
this.navigator = navigator;
this.window = window;
ProjectTemplateService templateService = Services.getRequiredService(ProjectTemplateService.class);
projectTemplates = templateService.getAllTemplates();
setSizeFull();
setStyleName(STYLE_TEMPLATE_SELECT);
renderContent((VerticalLayout) getContent());
}
@Override
public Project getProject() {
return null;
}
/**
* Renders the content of the panel.
*/
private void renderContent(VerticalLayout content) {
CssLayout layout = new CssLayout();
layout.setWidth("600px"); //$NON-NLS-1$
content.addComponent(layout);
content.setComponentAlignment(layout, Alignment.MIDDLE_CENTER);
Label title = new Label("<h2>" + "Available Project Templates" + "</h2>", Label.CONTENT_XHTML); //$NON-NLS-1$//$NON-NLS-3$
layout.addComponent(title);
TreeSet<RadioSelect.Entry> entries = new TreeSet<RadioSelect.Entry>();
for (ProjectTemplate projectTemplate : projectTemplates) {
entries.add(new RadioSelect.Entry(projectTemplate.getId(),
projectTemplate.getDisplayName(), projectTemplate.getDescription(), projectTemplate.getRank()));
}
select = new RadioSelect("", entries); //$NON-NLS-1$
layout.addComponent(select);
renderButtons(content);
// for ui debugging
content.setDebugId(DEBUG_ID_CONTENT);
}
/**
* Renders the OK/Cancel button bar.
*/
private void renderButtons(VerticalLayout content) {
CssLayout buttons = new CssLayout();
buttons.addStyleName(STYLE_TEMPLATE_SELECT_BUTTONS);
Button okButton = new Button("Create Project");
okButton.setIcon(ICON_BUTTON_OK);
okButton.addListener(new OKButtonListener());
buttons.addComponent(okButton);
Button cancelButton = new Button("Cancel");
cancelButton.setIcon(ICON_BUTTON_CANCEL);
cancelButton.addListener(new CancelButtonListener());
buttons.addComponent(cancelButton);
content.addComponent(buttons);
content.setComponentAlignment(buttons, Alignment.MIDDLE_CENTER);
}
private class OKButtonListener implements Button.ClickListener {
private static final long serialVersionUID = 6531396291087032954L;
@Override
public void buttonClick(ClickEvent event) {
ProjectService projectService = ((ProjectService)EntityServices.getByEntityClass(Project.class));
Project newProject = projectService.createProject(select.getSelected(), application.getLoggedInUser());
PermitService permitService = Services.getRequiredService(PermitService.class);
permitService.switchProject(newProject);
ProjectEditPanel panel = new ProjectEditPanel(application, navigator, newProject, ProjectEditMode.NEW_PROJECT);
window.renderPanel(panel);
}
}
private class CancelButtonListener implements Button.ClickListener {
private static final long serialVersionUID = 4567366927195161150L;
@Override
public void buttonClick(ClickEvent event) {
navigator.navigateWelcomeView();
}
}
}