Package org.exoplatform.services.jcr.impl.core

Examples of org.exoplatform.services.jcr.impl.core.SessionImpl


   {

      checkIfAuditable(currentItem);

      AuditSession auditSession = new AuditSession(currentItem);
      SessionImpl session = (SessionImpl)currentItem.getSession();

      SessionDataManager dataManager = auditSession.getDataManager();

      NodeData auditHistory = auditSession.getAuditHistoryNodeData();
      if (auditHistory == null)
      {
         throw new PathNotFoundException("Audit history not found for " + currentItem.getPath());
      }

      // make path to the AUDITHISTORY_LASTRECORD property
      QPath path = QPath.makeChildPath(auditHistory.getQPath(), AuditService.EXO_AUDITHISTORY_LASTRECORD);
      // searching last name of node
      PropertyData pData = (PropertyData)dataManager.getItemData(path);
      String auditRecordName = String.valueOf(ValueDataUtil.getLong(pData.getValues().get(0)) + 1);

      // exo:auditRecord
      List<AccessControlEntry> access = new ArrayList<AccessControlEntry>();
      access.add(new AccessControlEntry(defaultIdentity, PermissionType.SET_PROPERTY));
      access.add(new AccessControlEntry(defaultIdentity, PermissionType.READ));

      for (String identity : adminIdentitys)
      {
         access.add(new AccessControlEntry(identity, PermissionType.REMOVE));
      }

      AccessControlList exoAuditRecordAccessControlList = new AccessControlList(session.getUserID(), access);

      TransientNodeData arNode =
         new TransientNodeData(QPath.makeChildPath(auditHistory.getQPath(), new InternalQName(null, auditRecordName)),
            IdGenerator.generate(), -1, AuditService.EXO_AUDITRECORD, new InternalQName[0],
            Integer.parseInt(auditRecordName), auditHistory.getIdentifier(), exoAuditRecordAccessControlList);

      // exo:auditRecord
      dataManager.update(new ItemState(arNode, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);

      // jcr:primaryType
      TransientPropertyData arPrType =
         TransientPropertyData.createPropertyData(arNode, Constants.JCR_PRIMARYTYPE, PropertyType.NAME, false,
            new TransientValueData(arNode.getPrimaryTypeName()));
      // exo:user
      TransientPropertyData arUser =
         TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_USER, PropertyType.STRING,
            false, new TransientValueData(session.getUserID()));
      // exo:created
      TransientPropertyData arCreated =
         TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_CREATED, PropertyType.DATE,
            false, new TransientValueData(dataManager.getTransactManager().getStorageDataManager().getCurrentTime()));
      // exo:eventType
      TransientPropertyData arEventType =
         TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_EVENTTYPE, PropertyType.LONG,
            false, new TransientValueData(eventType));

      // jcr:primaryType
      dataManager.update(new ItemState(arPrType, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()),
         true);

      // exo:user
      dataManager.update(new ItemState(arUser, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);

      // exo:created
      dataManager.update(new ItemState(arCreated, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()),
         true);

      // exo:eventType
      dataManager.update(new ItemState(arEventType, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()),
         true);

      if (!currentItem.isNode())
      {
         int propertyType = ((Property)currentItem).getType();

         if (propertyType != PropertyType.BINARY)
         {

            // exo:newValue
            TransientPropertyData arNewValue =
               TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_NEWVALUE, propertyType,
                  ((PropertyImpl)currentItem).isMultiValued(),
                  ((PropertyData)((PropertyImpl)currentItem).getData()).getValues());

            dataManager.update(
               new ItemState(arNewValue, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);

            if (eventType == Event.PROPERTY_CHANGED)
            {

               // exo:oldValue
               TransientPropertyData arOldValue =
                  TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_OLDVALUE, propertyType,
                     ((PropertyImpl)previousItem).isMultiValued(),
                     ((PropertyData)((PropertyImpl)previousItem).getData()).getValues());

               dataManager.update(
                  new ItemState(arOldValue, ItemState.ADDED, true, ((ItemImpl)previousItem).getInternalPath()), true);
            }
         }
      }

      NodeData vancestor; // nearest versionable ancestor
      if (currentItem.isNode())
      {
         vancestor = ((NodeImpl)currentItem).getVersionableAncestor();
      }
      else
      {
         vancestor = ((NodeImpl)((Property)currentItem).getParent()).getVersionableAncestor();

         // exo:propertyName
         TransientPropertyData propertyNameData =
            TransientPropertyData.createPropertyData(arNode, EXO_AUDITRECORD_PROPERTYNAME, PropertyType.STRING, false,
               new TransientValueData(((ItemImpl)currentItem).getInternalName()));
         dataManager.update(
            new ItemState(propertyNameData, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);
      }

      if (vancestor != null)
      {
         // auditable node under a version control, set related properties to the
         // audit record

         String versionUUID; // current base version UUID
         StringBuilder versionName = new StringBuilder(); // current base version name + labels

         PropertyData bvProp =
            (PropertyData)dataManager.getItemData(vancestor, new QPathEntry(Constants.JCR_BASEVERSION, 1),
               ItemType.PROPERTY);

         versionUUID = ValueDataUtil.getString(bvProp.getValues().get(0));

         // using JCR API objects
         Version version = (Version)dataManager.getItemByIdentifier(versionUUID, false);
         versionName = new StringBuilder(version.getName());

         if (!dataManager.isNew(version.getParent().getUUID()))
         {
            VersionHistory versionHistory =
               (VersionHistory)dataManager.getItemByIdentifier(version.getParent().getUUID(), false);
            String[] labels = versionHistory.getVersionLabels(version);
            for (int i = 0; i < labels.length; i++)
            {
               String vl = labels[i];
               if (i == 0)
               {
                  versionName.append(" ");
               }
               versionName.append("'").append(vl).append("' ");
            }
         }

         TransientPropertyData auditVersion =
            TransientPropertyData.createPropertyData(arNode, EXO_AUDITRECORD_AUDITVERSION, PropertyType.STRING, false,
               new TransientValueData(versionUUID));

         TransientPropertyData auditVersionName =
            TransientPropertyData.createPropertyData(arNode, EXO_AUDITRECORD_AUDITVERSIONNAME, PropertyType.STRING,
               false, new TransientValueData(versionName.toString()));

         dataManager.update(
            new ItemState(auditVersion, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);
         dataManager.update(
            new ItemState(auditVersionName, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);
      }

      // Update lastRecord
      PropertyData pLastRecord =
         (PropertyData)auditSession.getDataManager().getItemData(
            QPath.makeChildPath(auditHistory.getQPath(), EXO_AUDITHISTORY_LASTRECORD));

      pLastRecord =
         new TransientPropertyData(pLastRecord.getQPath(), pLastRecord.getIdentifier(),
            pLastRecord.getPersistedVersion(), pLastRecord.getType(), pLastRecord.getParentIdentifier(),
            pLastRecord.isMultiValued(), new TransientValueData(String.valueOf(auditRecordName)));

      dataManager.update(
         new ItemState(pLastRecord, ItemState.UPDATED, true, ((ItemImpl)currentItem).getInternalPath()), true);

      if (LOG.isDebugEnabled())
         LOG.debug("Add audit record: " + " Item path="
            + ((ItemImpl)currentItem).getLocation().getInternalPath().getAsString() + " User=" + session.getUserID()
            + " EventType=" + eventType);
   }
View Full Code Here


      // its primaryType exo:auditHistory
      // exo:targetNode (ref to item)
      // exo:lastRecord = "0"
      // in itemData/auditHistory - pointer to history (UUID)

      SessionImpl session = (SessionImpl)node.getSession();

      InternalQName aiName = new InternalQName(null, ((ItemImpl)node).getData().getIdentifier());
      // exo:auditHistory
      List<AccessControlEntry> access = new ArrayList<AccessControlEntry>();
      access.add(new AccessControlEntry(defaultIdentity, PermissionType.ADD_NODE));
      access.add(new AccessControlEntry(defaultIdentity, PermissionType.READ));
      access.add(new AccessControlEntry(defaultIdentity, PermissionType.SET_PROPERTY));

      for (String identity : adminIdentitys)
      {
         access.add(new AccessControlEntry(identity, PermissionType.REMOVE));
      }

      AccessControlList exoAuditHistoryAccessControlList = new AccessControlList(session.getUserID(), access);

      TransientNodeData ahNode =
         new TransientNodeData(QPath.makeChildPath(storage.getQPath(), aiName), IdGenerator.generate(), -1,
            AuditService.EXO_AUDITHISTORY,
            new InternalQName[]{Constants.MIX_REFERENCEABLE, Constants.EXO_PRIVILEGEABLE}, 0, storage.getIdentifier(),
            exoAuditHistoryAccessControlList);

      // jcr:primaryType
      TransientPropertyData aPrType =
         TransientPropertyData.createPropertyData(ahNode, Constants.JCR_PRIMARYTYPE, PropertyType.NAME, false,
            new TransientValueData(ahNode.getPrimaryTypeName()));
      // jcr:uuid
      TransientPropertyData ahUuid =
         TransientPropertyData.createPropertyData(ahNode, Constants.JCR_UUID, PropertyType.STRING, false,
            new TransientValueData(ahNode.getIdentifier()));
      // jcr:mixinTypes
      List<ValueData> mixValues = new ArrayList<ValueData>();
      mixValues.add(new TransientValueData(Constants.MIX_REFERENCEABLE));
      mixValues.add(new TransientValueData(Constants.EXO_PRIVILEGEABLE));

      TransientPropertyData ahMixinTypes =
         TransientPropertyData.createPropertyData(ahNode, Constants.JCR_MIXINTYPES, PropertyType.NAME, true, mixValues);

      // EXO_PERMISSIONS
      List<ValueData> permsValues = new ArrayList<ValueData>();
      for (int i = 0; i < ahNode.getACL().getPermissionEntries().size(); i++)
      {
         AccessControlEntry entry = ahNode.getACL().getPermissionEntries().get(i);
         permsValues.add(new TransientValueData(entry));
      }
      TransientPropertyData exoAuditPerms =
         TransientPropertyData.createPropertyData(ahNode, Constants.EXO_PERMISSIONS, ExtendedPropertyType.PERMISSION,
            true, permsValues);

      // exo:targetNode
      TransientPropertyData ahTargetNode =
         TransientPropertyData.createPropertyData(ahNode, AuditService.EXO_AUDITHISTORY_TARGETNODE,
            PropertyType.REFERENCE, false, new TransientValueData(((ItemImpl)node).getData().getIdentifier()));
      // exo:lastRecord
      TransientPropertyData ahLastRecord =
         TransientPropertyData.createPropertyData(ahNode, AuditService.EXO_AUDITHISTORY_LASTRECORD,
            PropertyType.STRING, false, new TransientValueData("0"));
      // node exo:auditHistory
      TransientPropertyData pAuditHistory =
         TransientPropertyData.createPropertyData((NodeData)((ItemImpl)node).getData(), AuditService.EXO_AUDITHISTORY,
            PropertyType.STRING, false, new TransientValueData(new Identifier(ahNode.getIdentifier())));
      session.getTransientNodesManager().update(
         new ItemState(ahNode, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(aPrType, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahUuid, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahMixinTypes, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(exoAuditPerms, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahTargetNode, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahLastRecord, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(pAuditHistory, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

   }
View Full Code Here

      NodeData auditHistory = auditSession.getAuditHistoryNodeData();
      // remove /jcr:system/exo:auditStorage/itemID
      // (delete in SessionDataManager)
      if (auditHistory != null)
      {
         SessionImpl session = (SessionImpl)node.getSession();
         session.getTransientNodesManager().delete(auditHistory);
      }
      else
         throw new PathNotFoundException("Audit history not found for " + node.getPath());
   }
View Full Code Here

   private void incrementalRestore(String pathBackupFile, String repositoryName, String workspaceName)
            throws RepositoryException, RepositoryConfigurationException, BackupOperationException,
            FileNotFoundException, IOException, ClassNotFoundException
   {
      SessionImpl sesion = (SessionImpl) repoService.getRepository(repositoryName).getSystemSession(workspaceName);
      WorkspacePersistentDataManager dataManager =
               (WorkspacePersistentDataManager) sesion.getContainer().getComponentInstanceOfType(
                        WorkspacePersistentDataManager.class);

      ObjectInputStream ois = null;
      File backupFile = null;
      try
      {
         backupFile = new File(pathBackupFile);
         ois = new ObjectInputStream(new FileInputStream(backupFile));

         while (true)
         {
            TransactionChangesLog changesLog = readExternal(ois);

            ChangesLogIterator cli = changesLog.getLogIterator();
            while (cli.hasNextLog())
            {
               if (cli.nextLog().getEventType() == ExtendedEvent.LOCK)
                  cli.removeLog();
            }

            saveChangesLog(dataManager, changesLog);
         }
      }
      catch (EOFException ioe)
      {
         // ok - reading all data from backup file;
      }
      finally
      {
         if (sesion != null)
            sesion.logout();
      }
   }
View Full Code Here

      try
      {
         pathBackupFile = getStorageURL().getFile();

         SessionImpl session = (SessionImpl)repository.getSystemSession(workspaceName);

         try
         {
            notifyListeners();
            FileOutputStream fos = new FileOutputStream(pathBackupFile);
            session.exportWorkspaceSystemView(fos, false, false);
         }
         finally
         {
            session.logout();
         }
      }
      catch (RepositoryException e)
      {
         log.error("Full backup failed " + getStorageURL().getPath(), e);
View Full Code Here

         Thread.sleep(delayTime);

         log.info("The backup has been started : " + manageableRepository.getConfiguration().getName() + "@"
            + workspaceName);

         SessionImpl session = (SessionImpl)manageableRepository.getSystemSession(workspaceName);

         Calendar backupTime = Calendar.getInstance();
         String fileName =
            manageableRepository.getConfiguration().getName() + "_" + workspaceName + "_"
               + fileNameFactory.getStrDate(backupTime) + "_" + fileNameFactory.getStrTime(backupTime) + ".xml";

         File backupFile = new File(backupDir.getCanonicalPath() + File.separator + fileName);

         if (backupFile.createNewFile())
         {

            session.exportWorkspaceSystemView(new FileOutputStream(backupFile), false, false);

            log.info("The backup has been finished : " + manageableRepository.getConfiguration().getName() + "@"
               + workspaceName);
         }
         else
View Full Code Here

   {

      checkIfAuditable(currentItem);

      AuditSession auditSession = new AuditSession(currentItem);
      SessionImpl session = (SessionImpl)currentItem.getSession();

      SessionDataManager dataManager = auditSession.getDataManager();

      NodeData auditHistory = auditSession.getAuditHistoryNodeData();
      if (auditHistory == null)
         throw new PathNotFoundException("Audit history not found for " + currentItem.getPath());

      if (auditHistory == null)
      {
         throw new RepositoryException("Audit history for " + currentItem.getPath() + "not found");
      }

      // make path to the AUDITHISTORY_LASTRECORD property
      QPath path = QPath.makeChildPath(auditHistory.getQPath(), AuditService.EXO_AUDITHISTORY_LASTRECORD);
      // searching last name of node
      PropertyData pData = (PropertyData)dataManager.getItemData(path);
      String auditRecordName;
      try
      {
         auditRecordName = String.valueOf((int)ValueDataConvertor.readLong(pData.getValues().get(0)) + 1);
      }
      catch (IOException e)
      {
         throw new RepositoryException("Error on add audit record. Problem in calculating new record name. "
            + e.getLocalizedMessage());
      }

      // exo:auditRecord
      List<AccessControlEntry> access = new ArrayList<AccessControlEntry>();
      access.add(new AccessControlEntry(SystemIdentity.ANY, PermissionType.SET_PROPERTY));
      access.add(new AccessControlEntry(SystemIdentity.ANY, PermissionType.READ));

      for (String identity : adminIdentitys)
      {
         access.add(new AccessControlEntry(identity, PermissionType.REMOVE));
      }

      AccessControlList exoAuditRecordAccessControlList = new AccessControlList(session.getUserID(), access);

      TransientNodeData arNode =
         new TransientNodeData(QPath.makeChildPath(auditHistory.getQPath(), new InternalQName(null, auditRecordName)),
            IdGenerator.generate(), -1, AuditService.EXO_AUDITRECORD, new InternalQName[0],
            Integer.parseInt(auditRecordName), auditHistory.getIdentifier(), exoAuditRecordAccessControlList);

      // exo:auditRecord
      dataManager.update(new ItemState(arNode, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);

      // jcr:primaryType
      TransientPropertyData arPrType =
         TransientPropertyData.createPropertyData(arNode, Constants.JCR_PRIMARYTYPE, PropertyType.NAME, false,
            new TransientValueData(arNode.getPrimaryTypeName()));
      // exo:user
      TransientPropertyData arUser =
         TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_USER, PropertyType.STRING,
            false, new TransientValueData(session.getUserID()));
      // exo:created
      TransientPropertyData arCreated =
         TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_CREATED, PropertyType.DATE,
            false, new TransientValueData(dataManager.getTransactManager().getStorageDataManager().getCurrentTime()));
      // exo:eventType
      TransientPropertyData arEventType =
         TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_EVENTTYPE, PropertyType.LONG,
            false, new TransientValueData(eventType));

      // jcr:primaryType
      dataManager.update(new ItemState(arPrType, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()),
         true);

      // exo:user
      dataManager.update(new ItemState(arUser, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);

      // exo:created
      dataManager.update(new ItemState(arCreated, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()),
         true);

      // exo:eventType
      dataManager.update(new ItemState(arEventType, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()),
         true);

      if (!currentItem.isNode())
      {
         int propertyType = ((Property)currentItem).getType();

         if (propertyType != PropertyType.BINARY)
         {

            // exo:newValue
            TransientPropertyData arNewValue =
               TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_NEWVALUE, propertyType,
                  ((PropertyImpl)currentItem).isMultiValued(),
                  ((PropertyData)((PropertyImpl)currentItem).getData()).getValues());

            dataManager.update(
               new ItemState(arNewValue, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);

            if (eventType == Event.PROPERTY_CHANGED)
            {

               // exo:oldValue
               TransientPropertyData arOldValue =
                  TransientPropertyData.createPropertyData(arNode, AuditService.EXO_AUDITRECORD_OLDVALUE, propertyType,
                     ((PropertyImpl)previousItem).isMultiValued(),
                     ((PropertyData)((PropertyImpl)previousItem).getData()).getValues());

               dataManager.update(
                  new ItemState(arOldValue, ItemState.ADDED, true, ((ItemImpl)previousItem).getInternalPath()), true);
            }
         }
      }

      NodeData vancestor; // nearest versionable ancestor
      if (currentItem.isNode())
      {
         vancestor = ((NodeImpl)currentItem).getVersionableAncestor();
      }
      else
      {
         vancestor = ((NodeImpl)((Property)currentItem).getParent()).getVersionableAncestor();

         // exo:propertyName
         TransientPropertyData propertyNameData =
            TransientPropertyData.createPropertyData(arNode, EXO_AUDITRECORD_PROPERTYNAME, PropertyType.STRING, false,
               new TransientValueData(((ItemImpl)currentItem).getInternalName()));
         dataManager.update(
            new ItemState(propertyNameData, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);
      }

      if (vancestor != null)
      {
         // auditable node under a version control, set related properties to the
         // audit record

         String versionUUID; // current base version UUID
         StringBuilder versionName = new StringBuilder(); // current base version name + labels

         PropertyData bvProp =
            (PropertyData)dataManager.getItemData(vancestor, new QPathEntry(Constants.JCR_BASEVERSION, 1),
               ItemType.PROPERTY);
         try
         {
            versionUUID = ValueDataConvertor.readString(bvProp.getValues().get(0));

            // using JCR API objects
            Version version = (Version)dataManager.getItemByIdentifier(versionUUID, false);
            versionName = new StringBuilder(version.getName());

            if (!dataManager.isNew(version.getParent().getUUID()))
            {
               VersionHistory versionHistory =
               (VersionHistory)dataManager.getItemByIdentifier(version.getParent().getUUID(), false);
               String[] labels = versionHistory.getVersionLabels(version);
               for (int i = 0; i < labels.length; i++)
               {
                  String vl = labels[i];
                  if (i == 0)
                  {
                     versionName.append(" ");
                  }
                  versionName.append("'").append(vl).append("' ");
               }
            }
         }
         catch (IOException e)
         {
            throw new RepositoryException("Can't read jcr:baseVersion property, error " + e, e);
         }

         TransientPropertyData auditVersion =
            TransientPropertyData.createPropertyData(arNode, EXO_AUDITRECORD_AUDITVERSION, PropertyType.STRING, false,
               new TransientValueData(versionUUID));

         TransientPropertyData auditVersionName =
            TransientPropertyData.createPropertyData(arNode, EXO_AUDITRECORD_AUDITVERSIONNAME, PropertyType.STRING,
               false, new TransientValueData(versionName.toString()));

         dataManager.update(
            new ItemState(auditVersion, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);
         dataManager.update(
            new ItemState(auditVersionName, ItemState.ADDED, true, ((ItemImpl)currentItem).getInternalPath()), true);
      }

      // Update lastRecord
      PropertyData pLastRecord =
         (PropertyData)auditSession.getDataManager().getItemData(
            QPath.makeChildPath(auditHistory.getQPath(), EXO_AUDITHISTORY_LASTRECORD));

      pLastRecord =
         new TransientPropertyData(pLastRecord.getQPath(), pLastRecord.getIdentifier(),
            pLastRecord.getPersistedVersion(), pLastRecord.getType(), pLastRecord.getParentIdentifier(),
            pLastRecord.isMultiValued(), new TransientValueData(String.valueOf(auditRecordName)));

      dataManager.update(
         new ItemState(pLastRecord, ItemState.UPDATED, true, ((ItemImpl)currentItem).getInternalPath()), true);

      if (LOG.isDebugEnabled())
         LOG.debug("Add audit record: " + " Item path="
            + ((ItemImpl)currentItem).getLocation().getInternalPath().getAsString() + " User=" + session.getUserID()
            + " EventType=" + eventType);
   }
View Full Code Here

      // its primaryType exo:auditHistory
      // exo:targetNode (ref to item)
      // exo:lastRecord = "0"
      // in itemData/auditHistory - pointer to history (UUID)

      SessionImpl session = (SessionImpl)node.getSession();

      InternalQName aiName = new InternalQName(null, ((ItemImpl)node).getData().getIdentifier());
      // exo:auditHistory
      List<AccessControlEntry> access = new ArrayList<AccessControlEntry>();
      access.add(new AccessControlEntry(SystemIdentity.ANY, PermissionType.ADD_NODE));
      access.add(new AccessControlEntry(SystemIdentity.ANY, PermissionType.READ));
      access.add(new AccessControlEntry(SystemIdentity.ANY, PermissionType.SET_PROPERTY));

      for (String identity : adminIdentitys)
      {
         access.add(new AccessControlEntry(identity, PermissionType.REMOVE));
      }

      AccessControlList exoAuditHistoryAccessControlList = new AccessControlList(session.getUserID(), access);

      TransientNodeData ahNode =
         new TransientNodeData(QPath.makeChildPath(storage.getQPath(), aiName), IdGenerator.generate(), -1,
            AuditService.EXO_AUDITHISTORY,
            new InternalQName[]{Constants.MIX_REFERENCEABLE, Constants.EXO_PRIVILEGEABLE}, 0, storage.getIdentifier(),
            exoAuditHistoryAccessControlList);

      // jcr:primaryType
      TransientPropertyData aPrType =
         TransientPropertyData.createPropertyData(ahNode, Constants.JCR_PRIMARYTYPE, PropertyType.NAME, false,
            new TransientValueData(ahNode.getPrimaryTypeName()));
      // jcr:uuid
      TransientPropertyData ahUuid =
         TransientPropertyData.createPropertyData(ahNode, Constants.JCR_UUID, PropertyType.STRING, false,
            new TransientValueData(ahNode.getIdentifier()));
      // jcr:mixinTypes
      List<ValueData> mixValues = new ArrayList<ValueData>();
      mixValues.add(new TransientValueData(Constants.MIX_REFERENCEABLE));
      mixValues.add(new TransientValueData(Constants.EXO_PRIVILEGEABLE));

      TransientPropertyData ahMixinTypes =
         TransientPropertyData.createPropertyData(ahNode, Constants.JCR_MIXINTYPES, PropertyType.NAME, true, mixValues);

      // EXO_PERMISSIONS
      List<ValueData> permsValues = new ArrayList<ValueData>();
      for (int i = 0; i < ahNode.getACL().getPermissionEntries().size(); i++)
      {
         AccessControlEntry entry = ahNode.getACL().getPermissionEntries().get(i);
         permsValues.add(new TransientValueData(entry));
      }
      TransientPropertyData exoAuditPerms =
         TransientPropertyData.createPropertyData(ahNode, Constants.EXO_PERMISSIONS, ExtendedPropertyType.PERMISSION,
            true, permsValues);

      // exo:targetNode
      TransientPropertyData ahTargetNode =
         TransientPropertyData.createPropertyData(ahNode, AuditService.EXO_AUDITHISTORY_TARGETNODE,
            PropertyType.REFERENCE, false, new TransientValueData(((ItemImpl)node).getData().getIdentifier()));
      // exo:lastRecord
      TransientPropertyData ahLastRecord =
         TransientPropertyData.createPropertyData(ahNode, AuditService.EXO_AUDITHISTORY_LASTRECORD,
            PropertyType.STRING, false, new TransientValueData("0"));
      // node exo:auditHistory
      TransientPropertyData pAuditHistory =
         TransientPropertyData.createPropertyData((NodeData)((ItemImpl)node).getData(), AuditService.EXO_AUDITHISTORY,
            PropertyType.STRING, false, new TransientValueData(new Identifier(ahNode.getIdentifier())));
      session.getTransientNodesManager().update(
         new ItemState(ahNode, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(aPrType, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahUuid, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahMixinTypes, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(exoAuditPerms, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahTargetNode, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(ahLastRecord, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

      session.getTransientNodesManager().update(
         new ItemState(pAuditHistory, ItemState.ADDED, true, ((ItemImpl)node).getInternalPath()), true);

   }
View Full Code Here

      NodeData auditHistory = auditSession.getAuditHistoryNodeData();
      // remove /jcr:system/exo:auditStorage/itemID
      // (delete in SessionDataManager)
      if (auditHistory != null)
      {
         SessionImpl session = (SessionImpl)node.getSession();
         session.getTransientNodesManager().delete(auditHistory);
      }
      else
         throw new PathNotFoundException("Audit history not found for " + node.getPath());
   }
View Full Code Here

      try
      {
         pathBackupFile = getStorageURL().getFile();

         SessionImpl session = (SessionImpl)repository.getSystemSession(workspaceName);

         try
         {
            notifyListeners();
            FileOutputStream fos = PrivilegedFileHelper.fileOutputStream(pathBackupFile);
            session.exportWorkspaceSystemView(fos, false, false);
         }
         finally
         {
            session.logout();
         }
      }
      catch (RepositoryException e)
      {
         log.error("Full backup failed " + getStorageURL().getPath(), e);
View Full Code Here

TOP

Related Classes of org.exoplatform.services.jcr.impl.core.SessionImpl

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.