Skip to content

Commit

Permalink
deprecated OClass.getBaseClasses() and replaced with getSubclasses(),…
Browse files Browse the repository at this point in the history
… that makes more sense
  • Loading branch information
luigidellaquila committed Mar 3, 2015
1 parent 4b44d75 commit cd17423
Show file tree
Hide file tree
Showing 9 changed files with 118 additions and 117 deletions.
Expand Up @@ -119,10 +119,17 @@ public boolean isAutomaticIndexable() {


public int[] getPolymorphicClusterIds(); public int[] getPolymorphicClusterIds();


@Deprecated
public Collection<OClass> getBaseClasses(); public Collection<OClass> getBaseClasses();


@Deprecated
public Collection<OClass> getAllBaseClasses(); public Collection<OClass> getAllBaseClasses();


public Collection<OClass> getSubclasses();

public Collection<OClass> getAllSubclasses();


public long getSize(); public long getSize();


public float getClassOverSize(); public float getClassOverSize();
Expand Down
Expand Up @@ -16,16 +16,16 @@


package com.orientechnologies.orient.core.metadata.schema; package com.orientechnologies.orient.core.metadata.schema;


import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

import com.orientechnologies.common.listener.OProgressListener; import com.orientechnologies.common.listener.OProgressListener;
import com.orientechnologies.orient.core.index.OIndex; import com.orientechnologies.orient.core.index.OIndex;
import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy; import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy;
import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.record.impl.ODocument;


import java.io.IOException;
import java.util.Collection;
import java.util.Map;
import java.util.Set;

/** /**
* Abstract Delegate for OClass interface. * Abstract Delegate for OClass interface.
* *
Expand Down Expand Up @@ -208,14 +208,24 @@ public int[] getPolymorphicClusterIds() {
return delegate.getPolymorphicClusterIds(); return delegate.getPolymorphicClusterIds();
} }



@Override
public Collection<OClass> getSubclasses() {
return delegate.getSubclasses();
}

@Override @Override
public Collection<OClass> getBaseClasses() { public Collection<OClass> getBaseClasses() {
return delegate.getBaseClasses(); return delegate.getSubclasses();
}
@Override
public Collection<OClass> getAllSubclasses() {
return delegate.getAllSubclasses();
} }


@Override @Override
public Collection<OClass> getAllBaseClasses() { public Collection<OClass> getAllBaseClasses() {
return delegate.getAllBaseClasses(); return delegate.getAllSubclasses();
} }


@Override @Override
Expand Down
Expand Up @@ -35,12 +35,7 @@
import com.orientechnologies.orient.core.exception.OSecurityAccessException; import com.orientechnologies.orient.core.exception.OSecurityAccessException;
import com.orientechnologies.orient.core.exception.OSecurityException; import com.orientechnologies.orient.core.exception.OSecurityException;
import com.orientechnologies.orient.core.id.ORecordId; import com.orientechnologies.orient.core.id.ORecordId;
import com.orientechnologies.orient.core.index.OIndex; import com.orientechnologies.orient.core.index.*;
import com.orientechnologies.orient.core.index.OIndexDefinition;
import com.orientechnologies.orient.core.index.OIndexDefinitionFactory;
import com.orientechnologies.orient.core.index.OIndexException;
import com.orientechnologies.orient.core.index.OIndexManager;
import com.orientechnologies.orient.core.index.OIndexManagerProxy;
import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy; import com.orientechnologies.orient.core.metadata.schema.clusterselection.OClusterSelectionStrategy;
import com.orientechnologies.orient.core.metadata.security.ORole; import com.orientechnologies.orient.core.metadata.security.ORole;
import com.orientechnologies.orient.core.metadata.security.ORule; import com.orientechnologies.orient.core.metadata.security.ORule;
Expand All @@ -53,11 +48,7 @@
import com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerSchemaAware2CSV; import com.orientechnologies.orient.core.serialization.serializer.record.string.ORecordSerializerSchemaAware2CSV;
import com.orientechnologies.orient.core.sql.OCommandSQL; import com.orientechnologies.orient.core.sql.OCommandSQL;
import com.orientechnologies.orient.core.sql.query.OSQLAsynchQuery; import com.orientechnologies.orient.core.sql.query.OSQLAsynchQuery;
import com.orientechnologies.orient.core.storage.OAutoshardedStorage; import com.orientechnologies.orient.core.storage.*;
import com.orientechnologies.orient.core.storage.OPhysicalPosition;
import com.orientechnologies.orient.core.storage.ORawBuffer;
import com.orientechnologies.orient.core.storage.OStorage;
import com.orientechnologies.orient.core.storage.OStorageProxy;
import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage; import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage;
import com.orientechnologies.orient.core.type.ODocumentWrapper; import com.orientechnologies.orient.core.type.ODocumentWrapper;
import com.orientechnologies.orient.core.type.ODocumentWrapperNoClass; import com.orientechnologies.orient.core.type.ODocumentWrapperNoClass;
Expand All @@ -72,22 +63,22 @@
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public class OClassImpl extends ODocumentWrapperNoClass implements OClass { public class OClassImpl extends ODocumentWrapperNoClass implements OClass {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private static final int NOT_EXISTENT_CLUSTER_ID = -1; private static final int NOT_EXISTENT_CLUSTER_ID = -1;
final OSchemaShared owner; final OSchemaShared owner;
private final Map<String, OProperty> properties = new HashMap<String, OProperty>(); private final Map<String, OProperty> properties = new HashMap<String, OProperty>();
private int defaultClusterId = NOT_EXISTENT_CLUSTER_ID; private int defaultClusterId = NOT_EXISTENT_CLUSTER_ID;
private String name; private String name;
private Class<?> javaClass; private Class<?> javaClass;
private int[] clusterIds; private int[] clusterIds;
private OClassImpl superClass; private OClassImpl superClass;
private int[] polymorphicClusterIds; private int[] polymorphicClusterIds;
private List<OClass> baseClasses; private List<OClass> subclasses;
private float overSize = 0f; private float overSize = 0f;
private String shortName; private String shortName;
private boolean strictMode = false; // @SINCE v1.0rc8 private boolean strictMode = false; // @SINCE v1.0rc8
private boolean abstractClass = false; // @SINCE v1.2.0 private boolean abstractClass = false; // @SINCE v1.2.0
private Map<String, String> customFields; private Map<String, String> customFields;
private volatile OClusterSelectionStrategy clusterSelection; // @SINCE 1.7 private volatile OClusterSelectionStrategy clusterSelection; // @SINCE 1.7
private volatile int hashCode; private volatile int hashCode;


Expand Down Expand Up @@ -652,7 +643,7 @@ public void dropProperty(final String propertyName) {


@Override @Override
public void fromStream() { public void fromStream() {
baseClasses = null; subclasses = null;
superClass = null; superClass = null;


name = document.field("name"); name = document.field("name");
Expand Down Expand Up @@ -907,43 +898,51 @@ public OClass removeClusterId(final int clusterId) {
return this; return this;
} }


public Collection<OClass> getBaseClasses() { public Collection<OClass> getSubclasses() {
acquireSchemaReadLock(); acquireSchemaReadLock();
try { try {
if (baseClasses == null || baseClasses.size() == 0) if (subclasses == null || subclasses.size() == 0)
return Collections.emptyList(); return Collections.emptyList();


return Collections.unmodifiableCollection(baseClasses); return Collections.unmodifiableCollection(subclasses);
} finally { } finally {
releaseSchemaReadLock(); releaseSchemaReadLock();
} }
} }


public Collection<OClass> getAllBaseClasses() { public Collection<OClass> getAllSubclasses() {
acquireSchemaReadLock(); acquireSchemaReadLock();
try { try {
final Set<OClass> set = new HashSet<OClass>(); final Set<OClass> set = new HashSet<OClass>();
if (baseClasses != null) { if (subclasses != null) {
set.addAll(baseClasses); set.addAll(subclasses);


for (OClass c : baseClasses) for (OClass c : subclasses)
set.addAll(c.getAllBaseClasses()); set.addAll(c.getAllSubclasses());
} }
return set; return set;
} finally { } finally {
releaseSchemaReadLock(); releaseSchemaReadLock();
} }
} }


public Collection<OClass> getBaseClasses() {
return getSubclasses();
}

public Collection<OClass> getAllBaseClasses() {
return getAllSubclasses();
}

OClass removeBaseClassInternal(final OClass baseClass) { OClass removeBaseClassInternal(final OClass baseClass) {
acquireSchemaWriteLock(); acquireSchemaWriteLock();
try { try {
checkEmbedded(); checkEmbedded();


if (baseClasses == null) if (subclasses == null)
return this; return this;


if (baseClasses.remove(baseClass)) if (subclasses.remove(baseClass))
removePolymorphicClusterIds((OClassImpl) baseClass); removePolymorphicClusterIds((OClassImpl) baseClass);


return this; return this;
Expand Down Expand Up @@ -2058,13 +2057,13 @@ private void addClusterIdToIndexes(int iId) {
* The base class to add. * The base class to add.
*/ */
private OClass addBaseClasses(final OClass iBaseClass) { private OClass addBaseClasses(final OClass iBaseClass) {
if (baseClasses == null) if (subclasses == null)
baseClasses = new ArrayList<OClass>(); subclasses = new ArrayList<OClass>();


if (baseClasses.contains(iBaseClass)) if (subclasses.contains(iBaseClass))
return this; return this;


baseClasses.add(iBaseClass); subclasses.add(iBaseClass);


final Set<String> browsedClasses = new HashSet<String>(); final Set<String> browsedClasses = new HashSet<String>();


Expand Down
@@ -1,16 +1,5 @@
package com.orientechnologies.orient.core.metadata.schema; package com.orientechnologies.orient.core.metadata.schema;


import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.orientechnologies.common.listener.OProgressListener; import com.orientechnologies.common.listener.OProgressListener;
import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal; import com.orientechnologies.orient.core.db.ODatabaseDocumentInternal;
import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal; import com.orientechnologies.orient.core.db.ODatabaseRecordThreadLocal;
Expand All @@ -20,20 +9,23 @@
import com.orientechnologies.orient.core.metadata.security.OSecurityShared; import com.orientechnologies.orient.core.metadata.security.OSecurityShared;
import com.orientechnologies.orient.core.record.impl.ODocument; import com.orientechnologies.orient.core.record.impl.ODocument;


import java.io.IOException;
import java.util.*;

/** /**
* @author Andrey Lomakin (a.lomakin-at-orientechnologies.com) * @author Andrey Lomakin (a.lomakin-at-orientechnologies.com)
* @since 10/21/14 * @since 10/21/14
*/ */
public class OImmutableClass implements OClass { public class OImmutableClass implements OClass {
private final boolean isAbstract; private final boolean isAbstract;
private final boolean strictMode; private final boolean strictMode;


private final String superClassName; private final String superClassName;
private final String name; private final String name;
private final String streamAbleName; private final String streamAbleName;
private final Map<String, OProperty> properties; private final Map<String, OProperty> properties;
private Map<String, OProperty> allPropertiesMap; private Map<String, OProperty> allPropertiesMap;
private Collection<OProperty> allProperties; private Collection<OProperty> allProperties;
private final Class<?> javaClass; private final Class<?> javaClass;
private final OClusterSelectionStrategy clusterSelection; private final OClusterSelectionStrategy clusterSelection;
private final int defaultClusterId; private final int defaultClusterId;
Expand All @@ -45,12 +37,12 @@ public class OImmutableClass implements OClass {
private final String shortName; private final String shortName;
private final Map<String, String> customFields; private final Map<String, String> customFields;


private final OImmutableSchema schema; private final OImmutableSchema schema;
// do not do it volatile it is already SAFE TO USE IT in MT mode. // do not do it volatile it is already SAFE TO USE IT in MT mode.
private OImmutableClass superClass; private OImmutableClass superClass;
// do not do it volatile it is already SAFE TO USE IT in MT mode. // do not do it volatile it is already SAFE TO USE IT in MT mode.
private Collection<OImmutableClass> baseClasses; private Collection<OImmutableClass> subclasses;
private boolean restricted; private boolean restricted;


public OImmutableClass(OClass oClass, OImmutableSchema schema) { public OImmutableClass(OClass oClass, OImmutableSchema schema) {
isAbstract = oClass.isAbstract(); isAbstract = oClass.isAbstract();
Expand All @@ -70,7 +62,7 @@ public OImmutableClass(OClass oClass, OImmutableSchema schema) {
polymorphicClusterIds = oClass.getPolymorphicClusterIds(); polymorphicClusterIds = oClass.getPolymorphicClusterIds();


baseClassesNames = new ArrayList<String>(); baseClassesNames = new ArrayList<String>();
for (OClass baseClass : oClass.getBaseClasses()) for (OClass baseClass : oClass.getSubclasses())
baseClassesNames.add(baseClass.getName()); baseClassesNames.add(baseClass.getName());


overSize = oClass.getOverSize(); overSize = oClass.getOverSize();
Expand Down Expand Up @@ -341,28 +333,37 @@ public OImmutableSchema getSchema() {
} }


@Override @Override
public Collection<OClass> getBaseClasses() { public Collection<OClass> getSubclasses() {
initBaseClasses(); initBaseClasses();


ArrayList<OClass> result = new ArrayList<OClass>(); ArrayList<OClass> result = new ArrayList<OClass>();
for (OClass c : baseClasses) for (OClass c : subclasses)
result.add(c); result.add(c);


return result; return result;
} }


@Override @Override
public Collection<OClass> getAllBaseClasses() { public Collection<OClass> getAllSubclasses() {
initBaseClasses(); initBaseClasses();


final Set<OClass> set = new HashSet<OClass>(); final Set<OClass> set = new HashSet<OClass>();
set.addAll(getBaseClasses()); set.addAll(getSubclasses());


for (OImmutableClass c : baseClasses) for (OImmutableClass c : subclasses)
set.addAll(c.getAllBaseClasses()); set.addAll(c.getAllSubclasses());


return set; return set;
} }
@Override
public Collection<OClass> getBaseClasses() {
return getSubclasses();
}

@Override
public Collection<OClass> getAllBaseClasses() {
return getAllSubclasses();
}


@Override @Override
public long getSize() { public long getSize() {
Expand Down Expand Up @@ -662,12 +663,12 @@ private void initSuperClass() {
} }


private void initBaseClasses() { private void initBaseClasses() {
if (baseClasses == null) { if (subclasses == null) {
final List<OImmutableClass> result = new ArrayList<OImmutableClass>(baseClassesNames.size()); final List<OImmutableClass> result = new ArrayList<OImmutableClass>(baseClassesNames.size());
for (String clsName : baseClassesNames) for (String clsName : baseClassesNames)
result.add((OImmutableClass) schema.getClass(clsName)); result.add((OImmutableClass) schema.getClass(clsName));


baseClasses = result; subclasses = result;
} }
} }


Expand Down
Expand Up @@ -19,16 +19,6 @@
*/ */
package com.orientechnologies.orient.core.metadata.schema; package com.orientechnologies.orient.core.metadata.schema;


import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import com.orientechnologies.common.concur.lock.OReadersWriterSpinLock; import com.orientechnologies.common.concur.lock.OReadersWriterSpinLock;
import com.orientechnologies.common.concur.resource.OCloseable; import com.orientechnologies.common.concur.resource.OCloseable;
import com.orientechnologies.common.log.OLogManager; import com.orientechnologies.common.log.OLogManager;
Expand Down Expand Up @@ -63,6 +53,8 @@
import com.orientechnologies.orient.core.type.ODocumentWrapper; import com.orientechnologies.orient.core.type.ODocumentWrapper;
import com.orientechnologies.orient.core.type.ODocumentWrapperNoClass; import com.orientechnologies.orient.core.type.ODocumentWrapperNoClass;


import java.util.*;

/** /**
* Shared schema class. It's shared by all the database instances that point to the same storage. * Shared schema class. It's shared by all the database instances that point to the same storage.
* *
Expand Down Expand Up @@ -481,7 +473,7 @@ public void dropClass(final String className) {
if (cls == null) if (cls == null)
throw new OSchemaException("Class " + className + " was not found in current database"); throw new OSchemaException("Class " + className + " was not found in current database");


if (!cls.getBaseClasses().isEmpty()) if (!cls.getSubclasses().isEmpty())
throw new OSchemaException("Class " + className throw new OSchemaException("Class " + className
+ " cannot be dropped because it has sub classes. Remove the dependencies before trying to drop it again"); + " cannot be dropped because it has sub classes. Remove the dependencies before trying to drop it again");


Expand Down Expand Up @@ -1081,7 +1073,7 @@ private void dropClassInternal(final String className) {
if (cls == null) if (cls == null)
throw new OSchemaException("Class " + className + " was not found in current database"); throw new OSchemaException("Class " + className + " was not found in current database");


if (!cls.getBaseClasses().isEmpty()) if (!cls.getSubclasses().isEmpty())
throw new OSchemaException("Class " + className throw new OSchemaException("Class " + className
+ " cannot be dropped because it has sub classes. Remove the dependencies before trying to drop it again"); + " cannot be dropped because it has sub classes. Remove the dependencies before trying to drop it again");


Expand Down

0 comments on commit cd17423

Please sign in to comment.