2

I'm getting CMISNotFoundException while accessing the root folder even though i already have many documents uploaded to the repository.I'm able to fetch the repository id but getRootFolder throws error

could not fetch folder due to org.apache.chemistry.opencmis.commons.exceptions.CmisObjectNotFoundException: Object not found

s = d.getSession().session;
p.append("Successfully established session \n");
p.append("id:"+s.getRepositoryInfo().getId()+"\n");
try {
    Folder folder = s.getRootFolder();
    }catch(Exception e) {
           p.append("could not fetch folder due to "+e.toString()+"\n");
    }

I'm able to get the root folder now after creating a new repository.But now for applying ACLS i'm facing problem.

  1. LWhen i try to apply ACl to the root folder i get CmisObjectNotFound exception.
  2. When i apply ACL to subfolders, it workds but the permission is not applied correctly.I want to give user1 all the permission and user 2 read permission.But for user1 , now i'm not able to even view the folder.And for user2 i'm able to do everything except download.

I have referred to this link for doing so sap-link

 response.getWriter().println("<html><body>");
    try {
      // Use a unique name with package semantics e.g. com.foo.MyRepository
      String uniqueName = "com.vat.VatDocumentsRepo";
      // Use a secret key only known to your application (min. 10 chars)
      String secretKey = "****";
      Session openCmisSession = null;
        InitialContext ctx = new InitialContext();

        String lookupName = "java:comp/env/" + "EcmService";
        EcmService ecmSvc = (EcmService) ctx.lookup(lookupName);
      try {
        // connect to my repository
        openCmisSession = ecmSvc.connect(uniqueName, secretKey);

      }
      catch (CmisObjectNotFoundException e) {
        // repository does not exist, so try to create it
        RepositoryOptions options = new RepositoryOptions();
        options.setUniqueName(uniqueName);
        options.setRepositoryKey(secretKey);
        options.setVisibility(Visibility.PROTECTED);
        ecmSvc.createRepository(options);
        // should be created now, so connect to it
        openCmisSession = ecmSvc.connect(uniqueName, secretKey);
        openCmisSession.getDefaultContext().setIncludeAcls(true);
        openCmisSession.getDefaultContext().setIncludeAllowableActions(true);
        openCmisSession.getDefaultContext().setIncludePolicies(false);
      }
      response.getWriter().println(
        "<h3>You are now connected to the Repository with Id "
        + openCmisSession.getRepositoryInfo().getId()
        + "</h3>");
      Folder folder = openCmisSession.getRootFolder();
      Map<String, String> newFolderProps = new HashMap<String, String>();
      newFolderProps.put(PropertyIds.OBJECT_TYPE_ID, "cmis:folder");
      newFolderProps.put(PropertyIds.NAME, "Attachments");
      try {
        folder.createFolder(newFolderProps);
      } catch (CmisNameConstraintViolationException e) {
        // Folder exists already, nothing to do
      }
      String userIdOfUser1 = "user1 ";
      String userIdOfUser2 = "user2";
      response.getWriter().println("<h3>Created By :"+folder.getCreatedBy()+"</h3>");
      List<Ace> addAcl = new ArrayList<Ace>();

    // build and add ACE for user U1
    List<String> permissionsUser1 = new ArrayList<String>();
    permissionsUser1.add("cmis:all");
    Ace aceUser1 = openCmisSession.getObjectFactory().createAce(userIdOfUser1, permissionsUser1);
    addAcl.add(aceUser1);

    // build and add ACE for user U2
    List<String> permissionsUser2 = new ArrayList<String>();
        permissionsUser2.add("cmis:read");
    Ace aceUser2 = openCmisSession.getObjectFactory().createAce(userIdOfUser2, 
        permissionsUser1);
    addAcl.add(aceUser2);
    response.getWriter().println("<b>Permissions for users"+addAcl.toString()+"</b>");
    // list of ACEs which should be removed
    List<Ace> removeAcl = new ArrayList<Ace>();

    // build and add ACE for user {sap:builtin}everyone
    List<String> permissionsEveryone = new ArrayList<String>();
        permissionsEveryone.add("cmis:all");
    Ace aceEveryone = openCmisSession.getObjectFactory().createAce(
            "{sap:builtin}everyone", permissionsEveryone);
    removeAcl.add(aceEveryone);
    response.getWriter().println("<b>Removing Permissions for users"+removeAcl.toString()+"</b>");

    ItemIterable<CmisObject> children = folder.getChildren();
    response.getWriter().println("<h1> changing permissions of the following objects: </h1><ul>");
    for (CmisObject o : children) {
        response.getWriter().println("<li>");
        if (o instanceof Folder) {
              response.getWriter().println(" createdBy: " + o.getCreatedBy());
              o.applyAcl(addAcl, removeAcl, AclPropagation.OBJECTONLY);
              response.getWriter().println("Changed permission</li>");

            } else {
              Document doc = (Document) o;
              response.getWriter().println(" createdBy: " + o.getCreatedBy() + " filesize: "
                                         + doc.getContentStreamLength() + " bytes");
              doc.applyAcl(addAcl, removeAcl, AclPropagation.OBJECTONLY);
              response.getWriter().println("Changed permission</li>");
            }
    }
    response.getWriter().println("</ul>");
          } catch (Exception e) {
      response.getWriter().println("<h1>Error: "+e.toString()+"</h1>");
    } finally {
      response.getWriter().println("</body></html>");
    }

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.