protected void addSuperClassInternal(ODatabaseDocumentInternal database, final OClass superClass) { acquireSchemaWriteLock(); try { final OClassImpl cls; if (superClass instanceof OClassAbstractDelegate) cls = (OClassImpl) ((OClassAbstractDelegate) superClass).delegate; else cls = (OClassImpl) superClass; if (cls != null) { // CHECK THE USER HAS UPDATE PRIVILEGE AGAINST EXTENDING CLASS final OSecurityUser user = database.getUser(); if (user != null) user.allow(ORule.ResourceGeneric.CLASS, cls.getName(), ORole.PERMISSION_UPDATE); if (superClasses.contains(superClass)) { throw new OSchemaException( "Class: '" + this.getName() + "' already has the class '" + superClass.getName() + "' as superclass"); } cls.addBaseClass(this); superClasses.add(cls); } } finally { releaseSchemaWriteLock(); } }
public void clearCustom() { final ODatabaseDocumentInternal database = getDatabase(); database.checkSecurity(ORule.ResourceGeneric.SCHEMA, ORole.PERMISSION_UPDATE); acquireSchemaWriteLock(); try { final OStorage storage = database.getStorage(); if (isDistributedCommand(database)) { final String cmd = String.format("alter class `%s` custom clear", getName()); final OCommandSQL commandSQL = new OCommandSQL(cmd); commandSQL.addExcludedNode(((OAutoshardedStorage) storage).getNodeId()); database.command(commandSQL).execute(); clearCustomInternal(); } else clearCustomInternal(); } finally { releaseSchemaWriteLock(); } }
public OClassImpl setCustom(final String name, final String value) { final ODatabaseDocumentInternal database = getDatabase(); database.checkSecurity(ORule.ResourceGeneric.SCHEMA, ORole.PERMISSION_UPDATE); acquireSchemaWriteLock(); try { final OStorage storage = database.getStorage(); if (isDistributedCommand(database)) { final String cmd = String.format("alter class `%s` custom `%s`=%s", getName(), name, value); final OCommandSQL commandSQL = new OCommandSQL(cmd); commandSQL.addExcludedNode(((OAutoshardedStorage) storage).getNodeId()); database.command(commandSQL).execute(); setCustomInternal(name, value); } else setCustomInternal(name, value); return this; } finally { releaseSchemaWriteLock(); } }
public OClass setName(final String name) { if (getName().equals(name)) return this; final ODatabaseDocumentInternal database = getDatabase(); database.checkSecurity(ORule.ResourceGeneric.SCHEMA, ORole.PERMISSION_UPDATE); final Character wrongCharacter = OSchemaShared.checkClassNameIfValid(name); OClass oClass = database.getMetadata().getSchema().getClass(name); if (oClass != null) { String error = String.format("Cannot rename class %s to %s. A Class with name %s exists", this.name, name, name); throw new OSchemaException(error); } if (wrongCharacter != null) throw new OSchemaException( "Invalid class name found. Character '" + wrongCharacter + "' cannot be used in class name '" + name + "'"); acquireSchemaWriteLock(); try { final OStorage storage = database.getStorage(); if (isDistributedCommand(database)) { final String cmd = String.format("alter class `%s` name `%s`", this.name, name); final OCommandSQL commandSQL = new OCommandSQL(cmd); commandSQL.addExcludedNode(((OAutoshardedStorage) storage).getNodeId()); database.command(commandSQL).execute(); setNameInternal(database, name); } else setNameInternal(database, name); } finally { releaseSchemaWriteLock(); } return this; }
public OClass removeClusterId(final int clusterId) { final ODatabaseDocumentInternal database = getDatabase(); database.checkSecurity(ORule.ResourceGeneric.SCHEMA, ORole.PERMISSION_UPDATE); if (clusterIds.length == 1 && clusterId == clusterIds[0]) throw new ODatabaseException(" Impossible to remove the last cluster of class '" + getName() + "' drop the class instead"); acquireSchemaWriteLock(); try { final OStorage storage = database.getStorage(); if (isDistributedCommand(database)) { final String cmd = String.format("alter class `%s` removecluster %d", name, clusterId); final OCommandSQL commandSQL = new OCommandSQL(cmd); commandSQL.addExcludedNode(((OAutoshardedStorage) storage).getNodeId()); database.command(commandSQL).execute(); removeClusterIdInternal(database, clusterId); } else removeClusterIdInternal(database, clusterId); } finally { releaseSchemaWriteLock(); } return this; }