ru.codeinside.gses.webui.components.LayoutChanger.java Source code

Java tutorial

Introduction

Here is the source code for ru.codeinside.gses.webui.components.LayoutChanger.java

Source

/*
 * 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) 2013, MPL CodeInside http://codeinside.ru
 */

package ru.codeinside.gses.webui.components;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;

import ru.codeinside.gses.webui.components.api.Changer;
import com.vaadin.ui.Component;
import com.vaadin.ui.VerticalLayout;

public class LayoutChanger extends VerticalLayout implements Changer {

    private HashMap<String, Component> components;
    private static final long serialVersionUID = 1L;
    private VerticalLayout layout;
    private Component current;
    private Component previous;

    public Component getCurrent() {
        return current;
    }

    public Component getPrevious() {
        return previous;
    }

    public LayoutChanger(VerticalLayout layout) {
        this.layout = layout;
        components = new HashMap<String, Component>();
    }

    @Override
    public void set(Component newComponent, String name) {
        components.put(name, newComponent);
        layout.addComponent(newComponent);
        newComponent.setVisible(false);
    }

    @Override
    public void change(Component newComponent) {
        if (current == null) {
            Iterator<Entry<String, Component>> i = components.entrySet().iterator();
            while (i.hasNext()) {
                if (i.next().getValue().equals(newComponent)) {
                    current = newComponent;
                    current.setVisible(true);
                    return;
                }
            }
            throw new IllegalArgumentException("Set component to changer before change to it");
        } else {
            Iterator<Entry<String, Component>> i = components.entrySet().iterator();
            while (i.hasNext()) {
                if (i.next().getValue().equals(newComponent)) {
                    previous = current;
                    previous.setVisible(false);
                    current = newComponent;
                    current.setVisible(true);
                    return;
                }
            }
            throw new IllegalArgumentException("Set component to changer before change to it");
        }
    }

    @Override
    public void back() {
        if (previous != null) {
            previous.setVisible(true);
        }
        current.setVisible(false);
        Component tmp = current;
        current = previous;
        previous = tmp;
    }

    @Override
    public void clear() {
        layout.removeAllComponents();
    }
}