| /* |
| * Copyright (c) 2010-2012, 2015 Eike Stepper (Berlin, Germany) and others. |
| * 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: |
| * Simon McDuff - initial API and implementation |
| * Ibrahim Sallam - code refactoring for CDO 3.0 |
| */ |
| package org.eclipse.emf.cdo.server.internal.objectivity.schema; |
| |
| import org.eclipse.emf.cdo.common.revision.CDORevision; |
| |
| import com.objy.as.app.Class_Object; |
| import com.objy.db.app.Session; |
| import com.objy.db.app.ooId; |
| import com.objy.db.app.ooObj; |
| import com.objy.db.util.ooTreeListX; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| /** |
| * @author Simon McDuff |
| * @author ibrahim 100920 - IS: modified to use ooTreeListX instead of ObjyArrayList<ooId>. minimize the changes for the |
| * 3.0.x build. 100927 - IS: changed to wrap ooTreeListX to avoid using extra class/Class_Object creation |
| */ |
| public class ObjyArrayListId |
| { |
| |
| static public String className = "ooTreeListX"; |
| |
| private ooTreeListX list = null; |
| |
| // private int size = 0; |
| |
| public static void buildSchema() |
| { |
| return; |
| // d_Module top_mod = ObjySchema.getTopModule(); |
| // if (top_mod.resolve_class(ObjyArrayListId.className) == null |
| // && top_mod.resolve_proposed_class(ObjyArrayListId.className) == null) |
| // { |
| // |
| // if (TRACER_DEBUG.isEnabled()) |
| // { |
| // TRACER_DEBUG.trace("Schema not found for ooArrayListId. Adding ooArrayListId"); |
| // } |
| // |
| // boolean inProcess = top_mod.proposed_classes().hasNext(); |
| // |
| // // Proposed_Class A = new Proposed_Class(ooArrayListId.ClassName); |
| // Proposed_Class A = top_mod.propose_new_class(ObjyArrayListId.className); |
| // |
| // A.add_base_class(com.objy.as.app.d_Module.LAST, com.objy.as.app.d_Access_Kind.d_PUBLIC, "ooObj" /* "ooObj" */); |
| // |
| // A.add_basic_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind |
| // ObjyArrayList.sizeName, // Attribute name |
| // 1, // # elements in fixed-size array |
| // ooBaseType.ooINT32 // Type of numeric data |
| // ); // Default value |
| // |
| // A.add_ref_attribute(com.objy.as.app.d_Module.LAST, d_Access_Kind.d_PUBLIC, // Access kind |
| // ObjyArrayList.arrayName, // Attribute name |
| // 1, // # elements in fixed-size array |
| // "ooTreeListX", false); |
| // |
| // // top_mod.propose_new_class(A); |
| // if (!inProcess) |
| // { |
| // top_mod.activate_proposals(true, true); |
| // } |
| // |
| // if (TRACER_DEBUG.isEnabled()) |
| // { |
| // TRACER_DEBUG.trace("SCHEMA changed : ooArrayListId added"); |
| // } |
| // } |
| |
| } |
| |
| public static void initObject(Class_Object classObject) |
| { |
| return; |
| // // set the size to 0; |
| // classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(0)); |
| // // create the ooTreeListX. |
| // ooTreeListX list = new ooTreeListX(); |
| // ooObj anObj = ooObj.create_ooObj(classObject.objectID()); |
| // anObj.cluster(list); |
| // // System.out.println("initObject: " + anObj.getOid().getStoreString() + " treeListX: " |
| // // + list.getOid().getStoreString()); |
| // classObject.nset_ooId(ObjyArrayList.arrayName, list.getOid()); |
| } |
| |
| public ObjyArrayListId(Class_Object classObject) |
| { |
| // get the ooTreeList object. |
| ooId listId = classObject.objectID(); |
| list = (ooTreeListX)Session.getCurrent().getFD().objectFrom(listId); |
| } |
| |
| protected void setValue(long index, ooObj newValue) |
| { |
| list.set((int)index, newValue); |
| } |
| |
| protected ooObj getValue(long index) |
| { |
| return (ooObj)list.get((int)index); |
| } |
| |
| protected ooId getOidValue(long index) |
| { |
| // System.out.println(" - ooArrayListId.getValue() at index: " + index + |
| // " for classObject: " + classObject.objectID().getStoreString() ); |
| return getValue(index).getOid(); |
| } |
| |
| public ooId get(long index) |
| { |
| if (index >= size()) |
| { |
| throw new ArrayIndexOutOfBoundsException(); |
| } |
| |
| return getOidValue(index); |
| } |
| |
| public void set(long index, ooId newValue) |
| { |
| setValue(index, ooObj.create_ooObj(newValue)); |
| setSize(); |
| } |
| |
| public ooId[] getAll(int index, int chunkSize) |
| { |
| long size = size(); |
| |
| if (chunkSize != CDORevision.UNCHUNKED) |
| { |
| size = Math.min(size, chunkSize); |
| } |
| if (size == 0) |
| { |
| return null; |
| } |
| |
| ooId[] ooIds = new ooId[(int)size]; |
| for (int i = 0; i < size; i++) |
| { |
| ooIds[i] = getOidValue(i + index); |
| } |
| return ooIds; |
| } |
| |
| public void add(ooId newValue) |
| { |
| list.add(ooObj.create_ooObj(newValue)); |
| // size++; |
| } |
| |
| public void add(int index, ooId newValue) |
| { |
| try |
| { |
| list.add(index, ooObj.create_ooObj(newValue)); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| // size++; |
| } |
| |
| public void addAll(int index, Object[] newValue) |
| { |
| List<Object> objList = new ArrayList<Object>(); |
| for (int i = 0; i < newValue.length; i++) |
| { |
| objList.add(ooObj.create_ooObj((ooId)newValue[i])); |
| } |
| |
| list.addAll(index, objList); |
| // setSize(); |
| } |
| |
| public void move(long newPosition, long oldPosition) |
| { |
| if (oldPosition == newPosition) |
| { |
| return; |
| } |
| |
| // get the object at oldPosition. |
| ooObj value = getValue(oldPosition); |
| |
| // remove the oldPosition. |
| remove((int)oldPosition); |
| list.add((int)newPosition, value); |
| } |
| |
| public void remove(int index) |
| { |
| list.remove(index); |
| // setSize(); |
| } |
| |
| public void clear() |
| { |
| list.clear(); |
| // size = 0; |
| // setSize(); |
| } |
| |
| protected void setSize() |
| { |
| // System.out.println(">>> classObject: " + classObject.objectID().getStoreString() + " <<<"); |
| // System.out.println("ooArrayList.saveSize() - value to store in objy is: " + cacheSize); |
| // classObject.nset_numeric(ObjyArrayList.sizeName, new Numeric_Value(size)); |
| } |
| |
| public long size() |
| { |
| // size = (int)classObject.nget_numeric(ObjyArrayList.sizeName).longValue(); |
| int size = list.size(); |
| return size; |
| } |
| |
| public ooObj copy(ooObj nearObj) |
| { |
| |
| ooTreeListX newList = new ooTreeListX(2/* (int)size() */, false); |
| // ObjyObjectManager.newInternalObjCount++; |
| |
| nearObj.cluster(newList); |
| if (size() > 0) |
| { |
| newList.addAll(list); |
| } |
| |
| // Class_Object newClassObject = new Class_Object(newObj); |
| // newClassObject.nset_ooId(ObjyArrayList.arrayName, newList.getOid()); |
| |
| return newList; |
| } |
| |
| } |