package org.semanticsoft.vaaclipse.p2.install.ui.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.eclipse.equinox.p2.metadata.IInstallableUnit;
import org.semanticsoft.vaaclipse.p2.install.ui.IBasicUI;
import org.semanticsoft.vaaclipse.p2.install.ui.IContainerP2Views;
import org.semanticsoft.vaaclipse.p2.iservice.IInstallNewSoftwareService;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Component;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.HasComponents;
import com.vaadin.ui.Notification;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window;
/*******************************************************************************
* Copyright (c) 2012 Klevis Ramo 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: Klevis Ramo - initial API and implementation
*******************************************************************************/
public class ContainerP2Views implements IContainerP2Views {
List<IBasicUI> listUI = new ArrayList<>();
Button buttonNext = new Button("Next");
Button buttonPrevies = new Button("Back");
Button buttonInstall = new Button("Install");
VerticalLayout mainLayout = new VerticalLayout();
IBasicUI selectedBasicUI = null;
IInstallNewSoftwareService installService;
int maxViews = 2;
public ContainerP2Views(
IInstallNewSoftwareService installNewSoftwareService,
IBasicUI... listUI) {
super();
this.installService = installNewSoftwareService;
addViews(Arrays.asList(listUI));
}
@Override
public Object getUIComponent() {
// TODO Auto-generated method stub
return mainLayout;
}
@Override
public void initUI() {
// TODO Auto-generated method stub
mainLayout.removeAllComponents();
mainLayout.addComponent((Component) listUI.get(0).getUIComponent());
selectedBasicUI = listUI.get(0);
final CssLayout cssLayout = new CssLayout();
cssLayout.addComponent(buttonPrevies);
cssLayout.addComponent(buttonNext);
buttonNext.setEnabled(true);
buttonInstall.setEnabled(false);
buttonPrevies.setEnabled(false);
cssLayout.addComponent(buttonInstall);
buttonInstall.addClickListener(new Button.ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO Auto-generated method stub
boolean validate = listUI.get(maxViews - 1).validate();
if (validate) {
installService.installNewSoftware( listUI
.get(maxViews - 1).getRepositories());
HasComponents parent = buttonNext.getParent();
while (!(parent instanceof Window)) {
parent = parent.getParent();
}
Window w = (Window) parent;
w.close();
Notification.show("Software installed");
}
}
});
Button.ClickListener listenerButton = new Button.ClickListener() {
int index = 0;
IBasicUI iBasicUIWas = null;
IBasicUI iBasicUI = null;
@Override
public void buttonClick(ClickEvent event) {
// TODO Auto-generated method stub
if (event.getButton() == buttonNext) {
boolean validate = listUI.get(index).validate();
if (index < maxViews - 1 && validate) {
mainLayout.removeAllComponents();
index++;
iBasicUIWas = iBasicUI;
if(iBasicUI==null){
iBasicUIWas=listUI.get(0);
}
iBasicUI = listUI.get(index);
iBasicUI.addRepositories(iBasicUIWas.getRepositories());
mainLayout.addComponent((Component) iBasicUI
.getUIComponent());
handleButtons();
}
} else if (event.getButton() == buttonPrevies) {
if (index > -1) {
if (index > 0)
mainLayout.removeAllComponents();
index--;
if(iBasicUI==null){
iBasicUIWas=listUI.get(0);
}
iBasicUIWas = iBasicUI;
iBasicUI = listUI.get(index);
iBasicUI.addRepositories(iBasicUIWas.getRepositories());
mainLayout.addComponent((Component) iBasicUI
.getUIComponent());
handleButtons();
}
}
mainLayout.addComponent(cssLayout);
}
private void handleButtons() {
if (index == 0) {
buttonPrevies.setEnabled(false);
buttonInstall.setEnabled(false);
} else if (index == maxViews - 1) {
buttonNext.setEnabled(false);
buttonInstall.setEnabled(true);
}
if (index > 0) {
buttonPrevies.setEnabled(true);
}
if (index < maxViews - 1) {
buttonNext.setEnabled(true);
}
}
};
buttonNext.addClickListener(listenerButton);
buttonPrevies.addClickListener(listenerButton);
mainLayout.addComponent(cssLayout);
}
@Override
public String errorMessage() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean validate() {
// TODO Auto-generated method stub
return false;
}
@Override
public void addViews(List<IBasicUI> views) {
// TODO Auto-generated method stub
if (views == null) {
throw new IllegalArgumentException("Views must not be null");
}
maxViews = views.size();
listUI.addAll(views);
}
@Override
public void addRepositories(List<IInstallableUnit> list) {
// TODO Auto-generated method stub
}
@Override
public List<IInstallableUnit> getRepositories() {
// TODO Auto-generated method stub
return null;
}
}