package org.semanticsoft.vaaclipse.p2.sites.ui.impl;
import java.net.URI;
import java.util.Collection;
import java.util.List;
import org.eclipse.equinox.p2.core.IProvisioningAgent;
import org.semanticsoft.vaaclipse.p2.iservice.ISitesManager;
import org.semanticsoft.vaaclipse.p2.sites.ui.ISitesView;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CheckBox;
import com.vaadin.ui.CssLayout;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Notification;
import com.vaadin.ui.TreeTable;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window.CloseEvent;
import com.vaadin.ui.Window.CloseListener;
/*******************************************************************************
* 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 SitesView implements ISitesView {
VerticalLayout mainLayout = new VerticalLayout();
private TreeTable treeTable;
IProvisioningAgent agent;
ISitesManager sitesManager;
@Override
public Object getUIComponent() {
// TODO Auto-generated method stub
return mainLayout;
}
public void loadSites() {
treeTable.removeAllItems();
List<URI> listAllUpdateSites = sitesManager.listAllUpdateSites(agent);
for (URI uri : listAllUpdateSites) {
String string = uri.toString();
treeTable
.addItem(
new Object[] {
sitesManager.getReposiotoryNickName(agent,
uri),
uri.toString(),
""
+ sitesManager.isRepositoryEnabled(
agent, uri) }, uri);
}
}
public SitesView(IProvisioningAgent agent, ISitesManager sitesManager) {
super();
this.agent = agent;
this.sitesManager = sitesManager;
initUI();
loadSites();
}
public void addSite() {
final AddSiteDialog addSiteDialog = new AddSiteDialog(sitesManager,
agent);
addSiteDialog.addCloseListener(new CloseListener() {
@Override
public void windowClose(CloseEvent e) {
// TODO Auto-generated method stub
if (addSiteDialog.isInstalled()) {
loadSites();
}
}
});
mainLayout.getUI().addWindow(addSiteDialog);
}
public void removeSite(String uri) {
try {
sitesManager.removeRepository(uri, agent);
} catch (RuntimeException e) {
e.printStackTrace();
return;
}
}
public void modificSite() {
if (!isSelected()) {
Notification.show("You must select at least one");
return;
}
Collection<URI> selected = getSelected();
if (selected.size() > 1) {
Notification.show("You must select only one entry");
return;
}
URI uri = selected.iterator().next();
final AddSiteDialog addSiteDialog = new AddSiteDialog(sitesManager, agent,
uri.toString(), sitesManager.getReposiotoryNickName(agent, uri));
mainLayout.getUI().addWindow(addSiteDialog);
addSiteDialog.addCloseListener(new CloseListener() {
@Override
public void windowClose(CloseEvent e) {
// TODO Auto-generated method stub
if (addSiteDialog.isInstalled()) {
loadSites();
}
}
});
}
@Override
public void initUI() {
// TODO Auto-generated method stub
CssLayout buttonLayout = new CssLayout();
Button buttonAdd = new Button("Add");
buttonAdd.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO Auto-generated method stub
addSite();
}
});
buttonLayout.addComponent(buttonAdd);
Button buttonRemove = new Button("Remove");
buttonRemove.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO Auto-generated method stub
if (!isSelected()) {
Notification.show("Must select at least one");
return;
}
Collection<URI> value = getSelected();
for (URI u : value) {
removeSite(u.toString());
}
loadSites();
}
});
buttonLayout.addComponent(buttonRemove);
Button buttonEdit = new Button("Edit");
buttonEdit.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO Auto-generated method stub
modificSite();
}
});
buttonLayout.addComponent(buttonEdit);
VerticalLayout verticalLayoutButton = new VerticalLayout();
CheckBox enableChek = new CheckBox("Enable");
verticalLayoutButton.addComponent(enableChek);
enableChek.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
// TODO Auto-generated method stub
if (!isSelected()) {
Notification.show("Must select at least one");
return;
}
Boolean value = (Boolean) event.getProperty().getValue();
Collection<URI> selected = getSelected();
for (URI uri : selected) {
sitesManager.setRepositoryEnabled(agent, uri, value);
}
loadSites();
}
});
Button reloadButton = new Button("Reload");
reloadButton.addClickListener(new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
// TODO Auto-generated method stub
loadSites();
}
});
verticalLayoutButton.addComponent(reloadButton);
Button importButton = new Button("Import");
verticalLayoutButton.addComponent(importButton);
Button exportButton = new Button("Export");
verticalLayoutButton.addComponent(exportButton);
treeTable = new TreeTable("List of avaible software sites");
treeTable.addContainerProperty("Name", String.class, "");
treeTable.addContainerProperty("Location", String.class, "");
treeTable.addContainerProperty("Enable", String.class, "");
treeTable.setPageLength(5);
treeTable.setWidth("40em");
treeTable.setSelectable(true);
treeTable.setImmediate(true);
treeTable.setMultiSelect(true);
HorizontalLayout simpleContainer = new HorizontalLayout();
simpleContainer.addComponent(treeTable);
simpleContainer.addComponent(verticalLayoutButton);
mainLayout.addComponent(buttonLayout);
mainLayout.addComponent(simpleContainer);
}
private boolean isSelected() {
Collection<URI> value = (Collection<URI>) treeTable.getValue();
return !value.isEmpty();
}
private Collection<URI> getSelected() {
Collection<URI> value = (Collection<URI>) treeTable.getValue();
return value;
}
@Override
public String errorMessage() {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean validate() {
// TODO Auto-generated method stub
return false;
}
}