/* * ModeShape (http://www.modeshape.org) * * 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 org.modeshape.sequencer.testdata; import java.util.EnumSet; //CHECKSTYLE:OFF import java.util.*; //CHECKSTYLE:ON /** * This is a enum type test class. */ public enum EnumType implements Cloneable { /** * Indicates a waiting state. */ WAITING(0) { class TextProvider { public String get() { return "I'm waiting."; } } /** * {@inheritDoc} * * @see org.modeshape.sequencer.testdata.EnumType#execute() */ @Override public void execute() { this.executor.execute(new TextProvider().get()); } }, /** * Indicates a ready state. */ READY(1) { private String text = "I'm ready."; /** * {@inheritDoc} * * @see org.modeshape.sequencer.testdata.EnumType#execute() */ @Override public void execute() { this.executor.execute(text); } }, /** * Indicates a skipped state. */ SKIPPED(2) { /** * {@inheritDoc} * * @see org.modeshape.sequencer.testdata.EnumType#execute() */ @Override public void execute() { this.executor.execute("I've been skipped."); } }, /** * Indicates a done state. */ DONE(3) { /** * {@inheritDoc} * * @see org.modeshape.sequencer.testdata.EnumType#execute() */ @Override public void execute() { this.executor.execute("I'm done."); } }; class Executor { void execute(String text) { System.out.println(text); } } private static final Map<Integer, EnumType> _lookup; static { _lookup = new HashMap<Integer, EnumType>(); for (EnumType enumType : EnumSet.allOf(EnumType.class)) { _lookup.put(enumType.getCode(), enumType); } } public static EnumType get( int code ) { return _lookup.get(code); } private int code; Executor executor; private EnumType( int code ) { this.code = code; this.executor = new Executor(); } public abstract void execute(); public int getCode() { return this.code; } }