wicketdnd.examples.Example.java Source code

Java tutorial

Introduction

Here is the source code for wicketdnd.examples.Example.java

Source

/*
 * Copyright 2009 Sven Meier
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package wicketdnd.examples;

import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import java.util.Locale;
import java.util.Set;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormChoiceComponentUpdatingBehavior;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBoxMultipleChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.CompoundPropertyModel;
import org.apache.wicket.util.convert.IConverter;
import org.apache.wicket.util.string.Strings;

import wicketdnd.Operation;
import wicketdnd.Transfer;

/**
 * @author Sven Meier
 */
public abstract class Example extends Panel {

    private List<Operation> operations;

    private List<Operation> dragOperations = new ArrayList<Operation>();

    private List<Operation> dropOperations = new ArrayList<Operation>();

    private String[] types = new String[] { Transfer.ANY };

    protected WebMarkupContainer content;

    public Example(String id) {
        super(id);

        content = new WebMarkupContainer("content");
        content.setOutputMarkupId(true);
        add(content);

        operations = new ArrayList<Operation>();
        operations.addAll(EnumSet.allOf(Operation.class));

        dragOperations.addAll(operations);
        dropOperations.addAll(operations);

        add(new Label("title", new AbstractReadOnlyModel<String>() {
            @Override
            public String getObject() {
                String name = Example.this.getClass().getSimpleName();

                return name.substring(0, name.indexOf("Example"));
            }
        }));

        final WebMarkupContainer controls = new WebMarkupContainer("controls",
                new CompoundPropertyModel<Example>(this));
        add(controls);

        controls.add(new CheckBoxMultipleChoice<Operation>("dragOperations", operations).setSuffix("")
                .add(new AjaxFormChoiceComponentUpdatingBehavior() {
                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        target.add(content);
                    }
                }));

        controls.add(new CheckBoxMultipleChoice<Operation>("dropOperations", operations).setSuffix("")
                .add(new AjaxFormChoiceComponentUpdatingBehavior() {
                    @Override
                    protected void onUpdate(AjaxRequestTarget target) {
                        target.add(content);
                    }
                }));

        controls.add(new TextField<String[]>("types", String[].class) {
            @Override
            @SuppressWarnings("unchecked")
            public <C> IConverter<C> getConverter(Class<C> type) {
                return (IConverter<C>) new StringArrayConverter();
            }
        }.setConvertEmptyInputStringToNull(false).add(new OnChangeAjaxBehavior() {
            @Override
            protected void onUpdate(AjaxRequestTarget target) {
                target.add(content);
            }
        }));
    }

    protected Set<Operation> dragOperations() {
        if (dragOperations.isEmpty()) {
            return EnumSet.noneOf(Operation.class);
        } else {
            return EnumSet.copyOf(dragOperations);
        }
    }

    protected Set<Operation> dropOperations() {
        if (dropOperations.isEmpty()) {
            return EnumSet.noneOf(Operation.class);
        } else {
            return EnumSet.copyOf(dropOperations);
        }
    }

    public String[] types() {
        return types;
    }

    public void setTypes(String[] types) {
        this.types = types;
    }

    protected Foo operate(Transfer transfer) {
        Foo foo = transfer.getData();
        switch (transfer.getOperation()) {
        case MOVE:
        case COPY:
            return foo.copy();
        case LINK:
            return foo.link();
        default:
            throw new IllegalArgumentException();
        }
    }

    private class StringArrayConverter implements IConverter<String[]> {
        public String[] convertToObject(String value, Locale locale) {
            String[] strings = Strings.split(value, ',');
            if (strings.length == 0) {
                strings = new String[] { "" };
            }
            return strings;
        }

        public String convertToString(String[] value, Locale locale) {
            return Strings.join(",", (String[]) value);
        }
    }
}