/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2014, MPL CodeInside http://codeinside.ru
*/
package ru.codeinside.adm.ui;
import com.vaadin.data.Item;
import com.vaadin.data.Property;
import org.tepi.filtertable.FilterTable;
import ru.codeinside.adm.AdminServiceProvider;
import ru.codeinside.gses.webui.gws.TRef;
import ru.codeinside.gws.api.Client;
import ru.codeinside.gws.api.Revision;
import ru.codeinside.gws.api.ServiceDefinition;
import ru.codeinside.gws.api.ServiceDefinitionParser;
import javax.xml.namespace.QName;
import java.util.Map;
final class ActiveGwsClientsTable extends FilterTable {
GwsClientSink sink;
String currentName;
String currentVersion;
boolean selectionMode;
void setSink(GwsClientSink sink) {
this.sink = sink;
}
ActiveGwsClientsTable() {
super("Активные модули");
addStyleName("small striped");
setImmediate(true);
setFilterBarVisible(true);
setSelectable(true);
setSizeFull();
addContainerProperty("name", String.class, null);
addContainerProperty("version", String.class, null);
setVisibleColumns(new String[]{"name", "version"});
setColumnHeaders(new String[]{"Имя", "Вер."});
setColumnExpandRatio("name", 0.8f);
setPageLength(0);
setSortContainerPropertyId("name");
setFilterDecorator(new FilterDecorator_());
addListener(new ValueChangeListener() {
@Override
public void valueChange(Property.ValueChangeEvent event) {
if (selectionMode) {
return;
}
Item item = getItem(event.getProperty().getValue());
if (item != null) {
String name = (String) item.getItemProperty("name").getValue();
String version = (String) item.getItemProperty("version").getValue();
TRef<Client> ref = AdminServiceProvider.get().getClientRefByNameAndVersion(name, version);
if (ref != null) {
currentName = name;
currentVersion = version;
Revision revision = ref.getRef().getRevision();
final ServiceDefinitionParser serviceDefinitionParser = AdminServiceProvider.get().getServiceDefinitionParser();
ServiceDefinition serviceDefinition = serviceDefinitionParser.parseServiceDefinition(ref.getRef().getWsdlUrl());
String address = "";
for (Map.Entry<QName, ServiceDefinition.Service> service : serviceDefinition.services.entrySet()) {
for (Map.Entry<QName, ServiceDefinition.Port> port : service.getValue().ports.entrySet()) {
address = port.getValue().soapAddress;
break;
}
break;
}
String osgiName = ref.getName();
sink.selectClient(null, revision, address, osgiName, version, null, null, null, null, null);
}
} else {
currentName = null;
currentVersion = null;
}
}
});
}
void setCurrent(String newName, String newVersion) {
selectionMode = true;
currentName = newName;
currentVersion = newVersion;
try {
removeAllItems();
int i = 0;
int currentId = -1;
for (TRef client : AdminServiceProvider.get().getClientRefs()) {
String name = client.getName();
String version = client.getVersion();
addItem(new Object[]{name, version}, i);
if (name.equals(currentName) && version.equals(currentVersion)) {
currentId = i;
}
i++;
}
if (currentId >= 0) {
setValue(currentId);
}
sort();
} finally {
selectionMode = false;
}
}
}