log.info("createDocument succeeded with created id: " + id);
}
log.info(" getting object");
try {
ObjectData res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false,
false, null);
assertNotNull(res);
Map<String, PropertyData<?>> props = res.getProperties().getProperties();
// check returned properties
for (PropertyData<?> pd : props.values()) {
log.info(" return property id: " + pd.getId() + ", value: " + pd.getValues());
}
String returnedId = res.getId();
assertEquals(id, returnedId);
PropertyData<?> pd = props.get(PropertyIds.NAME);
assertNotNull(pd);
assertEquals(MY_CUSTOM_NAME, pd.getFirstValue());
pd = props.get(PropertyIds.OBJECT_TYPE_ID);
assertEquals(TEST_CUSTOM_DOCUMENT_TYPE_ID, pd.getFirstValue());
pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
assertEquals("My pretty string", pd.getFirstValue());
pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID);
assertEquals(BigInteger.valueOf(4711), pd.getFirstValue());
// update properties:
log.info("updating property");
final String newStringPropVal = "My ugly string";
final BigInteger newIntPropVal = BigInteger.valueOf(815);
List<PropertyData<?>> properties = new ArrayList<PropertyData<?>>();
// properties.add(fFactory.createPropertyIdData(PropertyIds.CMIS_NAME
// , MY_CUSTOM_NAME));
// properties.add(fFactory.createPropertyIdData(PropertyIds.
// CMIS_OBJECT_TYPE_ID, TEST_CUSTOM_DOCUMENT_TYPE_ID));
// Generate some property values for custom attributes
properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, newStringPropVal));
properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, newIntPropVal));
Properties newProps = fFactory.createPropertiesData(properties);
Holder<String> idHolder = new Holder<String>(id);
Holder<String> changeTokenHolder = new Holder<String>();
fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
oldChangeToken = changeTokenHolder.getValue(); // store for later
// use
// check if we now retrieve new values
res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
assertNotNull(res);
props = res.getProperties().getProperties();
for (PropertyData<?> pd2 : props.values()) {
log.info(" return property id: " + pd2.getId() + ", value: " + pd2.getValues());
}
returnedId = res.getId();
assertEquals(id, returnedId);
pd = props.get(PropertyIds.NAME);
assertNotNull(pd);
assertEquals(MY_CUSTOM_NAME, pd.getFirstValue());
pd = props.get(PropertyIds.OBJECT_TYPE_ID);
assertEquals(TEST_CUSTOM_DOCUMENT_TYPE_ID, pd.getFirstValue());
pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
assertEquals(newStringPropVal, pd.getFirstValue());
pd = props.get(TEST_DOCUMENT_MY_INT_PROP_ID);
assertEquals(newIntPropVal, pd.getFirstValue());
// Test delete properties
log.info("deleting property");
properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, (String) null));
newProps = fFactory.createPropertiesData(properties);
Thread.sleep(100); // ensure new change token, timer resolution is
// not good enough
fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
assertNotNull(res);
props = res.getProperties().getProperties();
for (PropertyData<?> pd2 : props.values()) {
log.info(" return property id: " + pd2.getId() + ", value: " + pd2.getValues());
}
pd = props.get(TEST_DOCUMENT_MY_STRING_PROP_ID);
assertNull(pd);
// delete a required property and expect exception:
properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyIntegerData(TEST_DOCUMENT_MY_INT_PROP_ID, (BigInteger) null));
newProps = fFactory.createPropertiesData(properties);
idHolder = new Holder<String>(id);
try {
fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
fail("Deleteing a required property should fail.");
} catch (Exception e) {
assertTrue(e instanceof CmisConstraintException);
}
// Test violation of property definition constraints
log.info("Test violation of property definition constraints");
properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID,
"A very long String ABCDEFHIJKLMNOPQRSTUVWXYZ"));
newProps = fFactory.createPropertiesData(properties);
idHolder = new Holder<String>(id);
try {
fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
fail("Exceeding max String lengt h should fail.");
} catch (Exception e) {
assertTrue(e instanceof CmisConstraintException);
}
// Test stale token
log.info("Test stale token");
properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyStringData(TEST_DOCUMENT_MY_STRING_PROP_ID, "ABC"));
newProps = fFactory.createPropertiesData(properties);
// set outdated token
newChangeToken = changeTokenHolder.getValue();
changeTokenHolder.setValue(oldChangeToken);
assertFalse(oldChangeToken.equals(newChangeToken));
try {
fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
fail("Update with an outdated changeToken should fail.");
} catch (Exception e) {
assertTrue(e instanceof CmisUpdateConflictException);
}
// test a rename
log.info("Test renaming");
final String newName = "My Renamed Document"; // MY_CUSTOM_NAME
properties = new ArrayList<PropertyData<?>>();
properties.add(fFactory.createPropertyIdData(PropertyIds.NAME, newName));
newProps = fFactory.createPropertiesData(properties);
changeTokenHolder.setValue(newChangeToken);
fObjSvc.updateProperties(fRepositoryId, idHolder, changeTokenHolder, newProps, null);
id = idHolder.getValue(); // note that id is path and has changed!
res = fObjSvc.getObject(fRepositoryId, id, "*", false, IncludeRelationships.NONE, null, false, false, null);
assertNotNull(res);
props = res.getProperties().getProperties();
pd = props.get(PropertyIds.NAME);
assertNotNull(pd);
assertEquals(newName, pd.getFirstValue());
// test rename with a conflicting name