

	/**
	 * @see javax.jmi.reflect.RefClass#refCreateInstance(java.util.List)
	 */
	public RefObject refCreateInstance(java.util.List args) {
		// check the isAbstract
		if (isAbstract()) {
			throw new javax.jmi.reflect.InvalidCallException(null,null,"Abstract class");
		}

		// check the isSingleton
		if (isSingleton() == true) {
			if (___refInstances.size() > 0) {
				throw new javax.jmi.reflect.AlreadyExistsException(
					(RefObject) ___refInstances.get(0));
			}
		}
		RefObject o = null;
		// create a new instance and run the appropriate constructor
		try {
			// check the args for null values of Java simple types
			java.util.List list = correctConstructorArgs(args);
			o = (RefObject) com.sap.ip.mmr.m1layer.Instantiator.getInstantiator().createInstanceByClass(___repository, this, list);
			// default implementation
			if (o == null) {
				o = new com.sap.ip.mmr.m1layer.MMRObject(___repository, args);
			}
		} catch (javax.jmi.reflect.TypeMismatchException tme) {
			throw tme;
		} catch (Exception e) {
			throw new com.sap.ip.mmr.foundation.CreateException(
				com.sap.ip.mmr.foundation.CreateException.CREATE_INSTANCE_ERROR,
				new java.lang.Object[] { getClass().getName(), e.toString() });
		}
		if (o == null) {
            String stra = "";
 			if (args != null) {
				int i = 0;
				Iterator iter = args.iterator();
				while (iter.hasNext()) {
					java.lang.Object arg = (java.lang.Object) iter.next();
					if (arg != null && arg instanceof String) {
						int len = ((String) arg).length();
						if (len > 30)
							len = 30;
						if (len > 0) {
							arg = ((String) arg).substring(0, len) + " ... ";  //$NON-NLS-1$
						}
					}
					stra += (" " + i + ": [" + arg.getClass().getName() + "] = " + arg);
					i++;
				}
			}
			throw new com.sap.ip.mmr.foundation.CreateException(
		   	  com.sap.ip.mmr.foundation.CreateException.CREATE_INSTANCE_ERROR,
			   new java.lang.Object[] { getClass().getName(), stra });
		} else {
			if (o instanceof IMMRObject) {
				((IMMRObject) o).set___Instantiator(this);
				((IMMRObject) o).set___QualifiedName(get___QualifiedName());
				((IMMRObject) o).set___QualifiedNameImmediatePackage(get___QualifiedNameImmediatePackage());
				((IMMRObject) o).set___ImmediatePackage(get___ImmediatePackage());
			}
			// put into cache
			___refInstances.add(o);
			// add to repository
			java.util.List l = new java.util.LinkedList();
			l.add(o);
			___repository.insertM1(l);
		}
		return o;
	}

	/**
	 * @see javax.jmi.reflect.RefClass#refAllOfType()
	 */
	public Collection refAllOfType() {
		java.util.LinkedList l = new java.util.LinkedList();
		// get top level package
		javax.jmi.reflect.RefPackage root = ___repository.getTopLevelPackageM1();
		// get all subtypes
		com.sap.ip.mmr.m2layer.model.MofClassImpl mo = (com.sap.ip.mmr.m2layer.model.MofClassImpl) refMetaObject();
		java.util.Collection col = mo.allSubtypes();
		// own ones
		col.add(mo);
		java.util.Iterator iter = col.iterator();
		while (iter.hasNext()) {
			javax.jmi.model.ModelElement ge = (javax.jmi.model.ModelElement) iter.next();
			// get the M1-layer class
			RefClass rc =
					(RefClass) root.refClass(
						com.sap.ip.mmr.foundation.Utilities.getUtilities().encodeQualifiedName(ge.getQualifiedName()));
			// get the instances
			java.util.Collection c = rc.refAllOfClass();
			if (c != null) {
				l.addAll(c);
			}
		}
		return java.util.Collections.unmodifiableCollection(l);
	}

	/**
	 * @see javax.jmi.reflect.RefClass#refAllOfClass()
	 */
	public Collection refAllOfClass() {
		return java.util.Collections.unmodifiableCollection(___refInstances);
	}

	/**
	 * @see javax.jmi.reflect.RefClass#refCreateStruct(RefObject, List)
	 */
	public RefStruct refCreateStruct(RefObject struct, List params) throws javax.jmi.reflect.TypeMismatchException {
		if (struct instanceof javax.jmi.model.Classifier) {
			return refCreateStruct(((javax.jmi.model.Classifier) struct).getName(), params);
		} else {
			throw new javax.jmi.reflect.InvalidCallException(struct, null,"refCreateStruct()");
		}
	}

	/**
	 * @see javax.jmi.reflect.RefClass#refCreateStruct(String, List)
	 */
	public RefStruct refCreateStruct(String structName, List params) throws javax.jmi.reflect.TypeMismatchException {
		String sn = structName;
		// create a new instance and run the appropriate constructor
		if (structName.indexOf(IRepositoryConst.M2PackageDelimiter) > 0) {
			sn = structName;
		} else {
			sn = ___qualifiedName + IRepositoryConst.M2PackageDelimiter + structName;
		}
		return ___repository.refCreateStructM1(sn, params);
	}

	/**
	 * @see javax.jmi.reflect.RefPackage#refGetEnum(RefObject, String)
	 */
	public RefEnum refGetEnum(RefObject enum, String name) {
		if (enum instanceof javax.jmi.model.EnumerationType) {
			return refGetEnum(((javax.jmi.model.EnumerationType) enum).getName(), name);
		} else {
			RefObject mo = enum.refMetaObject();
			if (mo != null && mo instanceof javax.jmi.model.ModelElement) {
				String nameEnum = ((javax.jmi.model.ModelElement) mo).getName();
				return refGetEnum(nameEnum, name);
			}
		}
		return null;
	}

	/**
	 * @see javax.jmi.reflect.RefPackage#refGetEnum(String, String)
	 */
	public RefEnum refGetEnum(String enumName, String name) {
		com.sap.ip.mmr.m1layer.RefEnumImpl enum =
			new com.sap.ip.mmr.m1layer.RefEnumImpl(___qualifiedName + "." + enumName, name);
		if (enum != null) {
			// add to repository
			java.util.List l = new java.util.LinkedList();
			l.add(enum);
			___repository.insertM1(l);
		}
		return enum;
	}


	public com.sap.ip.mmr.foundation.AssociationsContainer get___AssociationsContainer() {
	   return null;
    }	

	public void deleteInstance(javax.jmi.reflect.RefBaseObject rbo) {
		// delete in repository
		java.util.Collection objects = new java.util.ArrayList(1);
		objects.add(rbo);
		___repository.deleteM1(objects);		
		// remove from list
		___refInstances.remove(rbo);
	}

	public void deleteInstances() {
		// delete in repository
		___repository.deleteM1(refAllOfClass());		
		// remove all from list
		___refInstances.clear();
	}
	