All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wings.plaf.css.DragAndDropManagerCG Maven / Gradle / Ivy

The newest version!
package org.wings.plaf.css;

import org.wings.io.Device;
import org.wings.io.StringBuilderDevice;
import org.wings.SComponent;
import org.wings.header.SessionHeaders;
import org.wings.script.ScriptListener;
import org.wings.session.ScriptManager;
import org.wings.dnd.*;
import org.wings.plaf.Update;

import java.io.IOException;
import java.util.List;
import java.util.ArrayList;

public class DragAndDropManagerCG
    implements org.wings.plaf.DragAndDropManagerCG
{
    protected final List headers = new ArrayList();

    public DragAndDropManagerCG() {
    }

    @Override
    public void write(Device device, final SComponent component) throws IOException {
        final DragAndDropManager dragAndDropManager = (DragAndDropManager)component;

        ScriptManager.getInstance().addScriptListener(new MyScriptListener(dragAndDropManager));
    }

    @Override
    public void installCG(SComponent c) {
        SessionHeaders.getInstance().registerHeaders(headers);
    }

    @Override
    public void uninstallCG(SComponent c) {
        SessionHeaders.getInstance().deregisterHeaders(headers);
    }

    @Override
    public Update getComponentUpdate(SComponent component) {
        return new ComponentUpdate(component);
    }

    private static class MyScriptListener implements ScriptListener {

        private final DragAndDropManager dragAndDropManager;

        public MyScriptListener(DragAndDropManager dragAndDropManager) {
            this.dragAndDropManager = dragAndDropManager;
        }

        @Override
        public String getScript() {
            StringBuilder builder = AbstractComponentCG.STRING_BUILDER.get();
            builder.setLength(0);

            builder.append("wingS.dnd.manager = '");
            builder.append(dragAndDropManager.getName());
            builder.append("';");

            return builder.toString();
        }

        @Override
        public String getEvent() {
            return null;
        }

        @Override
        public String getCode() {
            return null;
        }

        @Override
        public int getPriority() {
            return DEFAULT_PRIORITY;
        }
    }

    protected class ComponentUpdate extends AbstractUpdate {

        public ComponentUpdate(SComponent component) {
            super(component);
        }

        @Override
        public int getProperty() {
            return FULL_REPLACE_UPDATE;
        }

        @Override
        public int getPriority() {
            return 4;
        }

        @Override
        public Handler getHandler() {
            String htmlCode = "";
            String exception = null;

            try {
                StringBuilderDevice htmlDevice = new StringBuilderDevice(1024);
                write(htmlDevice, component);
                htmlCode = htmlDevice.toString();
            } catch (Throwable t) {
                exception = t.getClass().getName();
            }

            UpdateHandler handler = new UpdateHandler("component");
            handler.addParameter(component.getName());
            handler.addParameter(htmlCode);
            if (exception != null) {
                handler.addParameter(exception);
            }
            return handler;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy