/*******************************************************************************
 * Copyright (c) 2004, 2007 Boeing.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Boeing - initial API and implementation
 *******************************************************************************/
package org.eclipse.osee.ote.message.tool.rec;

import org.eclipse.osee.ote.message.elements.ArrayElement;
import org.eclipse.osee.ote.message.elements.BooleanElement;
import org.eclipse.osee.ote.message.elements.CharElement;
import org.eclipse.osee.ote.message.elements.Element;
import org.eclipse.osee.ote.message.elements.EmptyEnum_Element;
import org.eclipse.osee.ote.message.elements.EnumeratedElement;
import org.eclipse.osee.ote.message.elements.FixedPointElement;
import org.eclipse.osee.ote.message.elements.Float32Element;
import org.eclipse.osee.ote.message.elements.Float64Element;
import org.eclipse.osee.ote.message.elements.IElementVisitor;
import org.eclipse.osee.ote.message.elements.IntegerElement;
import org.eclipse.osee.ote.message.elements.LongIntegerElement;
import org.eclipse.osee.ote.message.elements.RealElement;
import org.eclipse.osee.ote.message.elements.RecordElement;
import org.eclipse.osee.ote.message.elements.RecordMap;
import org.eclipse.osee.ote.message.elements.SignedInteger16Element;
import org.eclipse.osee.ote.message.elements.StringElement;
import org.eclipse.osee.ote.message.tool.rec.entry.ArrayElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.BooleanElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.CharElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.EmptyEnumEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.EnumeratedElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.IElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.IntegerElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.LongIntegerElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.RealElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.RecordElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.RecordMapEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.SignedInteger16ElementEntry;
import org.eclipse.osee.ote.message.tool.rec.entry.StringElementEntry;

public class ElementEntryFactory {

   private static final class ElementVisitor implements IElementVisitor {

      private IElementEntry entry = null;

      public IElementEntry getEntry() {
         return entry;
      }

      @Override
      public void asCharElement(CharElement element) {
         entry = new CharElementEntry(element);
      }

      @Override
      public void asEnumeratedElement(EnumeratedElement<?> element) {
         entry = new EnumeratedElementEntry(element);
      }

      @Override
      public void asFixedPointElement(FixedPointElement element) {
         entry = new RealElementEntry(element);
      }

      @Override
      public void asFloat32(Float32Element element) {
         entry = new RealElementEntry(element);
      }

      @Override
      public void asFloat64(Float64Element element) {
         entry = new RealElementEntry(element);
      }

      @Override
      public void asGenericElement(Element element) {
      }

      @Override
      public void asIntegerElement(IntegerElement element) {
         entry = new IntegerElementEntry(element);
      }

      @Override
      public void asRealElement(RealElement element) {
         entry = new RealElementEntry(element);
      }

      @Override
      public void asRecordElement(RecordElement element) {
         entry = new RecordElementEntry(element);
      }

      @Override
      public void asStringElement(StringElement element) {
         entry = new StringElementEntry(element);
      }

      @Override
      public void asBooleanElement(BooleanElement element) {
         entry = new BooleanElementEntry(element);
      }

      @Override
      public void asRecordMap(RecordMap<? extends RecordElement> element) {
         entry = new RecordMapEntry(element);
      }

      @Override
      public void asEmptyEnumElement(EmptyEnum_Element element) {
         entry = new EmptyEnumEntry(element);
      }

      @Override
      public void asArrayElement(ArrayElement element) {
         entry = new ArrayElementEntry(element);
      }

      @Override
      public void asLongIntegerElement(LongIntegerElement element) {
         entry = new LongIntegerElementEntry(element);
      }

      @Override
      public void asSignedInteger16Element(SignedInteger16Element element) {
         entry = new SignedInteger16ElementEntry(element);
      }

   }

   public static IElementEntry createEntry(Element element) {

      ElementVisitor visitor = new ElementVisitor();
      element.visit(visitor);
      IElementEntry entry = visitor.getEntry();
      if (entry != null) {
         return entry;
      }
      throw new IllegalArgumentException("factory cannot generate an entry for class " + element.getClass().getName());
   }
}
