package org.vaadin.smartgwt.server.layout;
import java.util.Collections;
import java.util.Iterator;
import org.vaadin.smartgwt.server.BaseWidget;
import org.vaadin.smartgwt.server.Canvas;
import org.vaadin.smartgwt.server.Window;
import org.vaadin.smartgwt.server.core.ComponentList;
import org.vaadin.smartgwt.server.core.ComponentPropertyPainter;
import org.vaadin.smartgwt.server.core.ComponentReference;
import org.vaadin.smartgwt.server.core.RegistrationEntry;
import org.vaadin.smartgwt.server.data.DataSource;
import org.vaadin.smartgwt.server.util.SC;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
import com.vaadin.ui.Component;
import com.vaadin.ui.ComponentContainer;
/**
* The Master Container is the top most container of SmartVaadin applications. Why is it needed? There are objects that exist in a static-like context on the
* client. DataSources, SC etc. These objects must have a server counterpart and it must be held somewhere.
*/
@com.vaadin.ui.ClientWidget(org.vaadin.smartgwt.client.ui.layout.VMasterContainer.class)
public class MasterContainer extends BaseWidget implements ComponentContainer {
private final ComponentPropertyPainter paintablePropertyPainter = new ComponentPropertyPainter(this);
private final ComponentList<NonUIComponent> nonUIComponents = paintablePropertyPainter.addComponentList("nonUIComponents");
private final ComponentReference<SC> sc = paintablePropertyPainter.addProperty("sc");
private final ComponentList<DataSource> dataSources = paintablePropertyPainter.addComponentList("dataSources");
private final ComponentReference<Canvas> pane = paintablePropertyPainter.addProperty("pane");
private final ComponentList<Window> window = paintablePropertyPainter.addComponentList("window");
public MasterContainer() {
sc.set(new SC());
}
public Iterator<NonUIComponent> getNonUIComponentIterator() {
return nonUIComponents.iterator();
}
/**
* Add a non-visual component to the container.
*
* @param component to be added.
*/
public void addNonUIComponent(NonUIComponent component) {
nonUIComponents.add(component);
}
/**
* Removes a non-visual component from the container.
*
* @param component to be removed.
*/
public void removeNonUIComponent(NonUIComponent component) {
nonUIComponents.remove(component);
}
public void addDataSource(DataSource dataSource) {
if (!dataSources.contains(dataSource)) {
dataSources.add(dataSource);
}
}
public Canvas getPane() {
return pane.get();
}
public void setPane(Canvas pane) {
this.pane.set(pane);
}
public SC getSC() {
return sc.get();
}
public RegistrationEntry register(final Window window) {
this.window.add(window);
requestRepaint();
return new RegistrationEntry() {
@Override
public void unregister() {
MasterContainer.this.window.remove(window);
requestRepaint();
}
@Override
public boolean isRegistered() {
return MasterContainer.this.window.contains(window);
}
};
}
@Override
public void paintContent(PaintTarget target) throws PaintException {
paintablePropertyPainter.paintContent(target);
super.paintContent(target);
}
@Override
public void addComponent(Component c) {
}
@Override
public void removeComponent(Component c) {
}
@Override
public void removeAllComponents() {
}
@Override
public void replaceComponent(Component oldComponent, Component newComponent) {
}
@Override
public Iterator<Component> getComponentIterator() {
return Collections.<Component> emptyList().iterator();
}
@Override
public void requestRepaintAll() {
}
@Override
public void moveComponentsFrom(ComponentContainer source) {
}
@Override
public void addListener(ComponentAttachListener listener) {
}
@Override
public void removeListener(ComponentAttachListener listener) {
}
@Override
public void addListener(ComponentDetachListener listener) {
}
@Override
public void removeListener(ComponentDetachListener listener) {
}
}