Dinky CMS is a Java Spring Boot Content Management Microservice. It is REST API first.
This project is maintained by schicwp
Additional content field types can be extended by implementing FieldType.
@Component
public class MyFieldType implements FieldType {
@Override
public String getName() {
//this is a unique name, used to declare fields of this type
return "MyType";
}
@Override
public boolean validateSubmission(Object object, ContentMap properties, Collection<String> errors) {
//TODO - validate that the submitted object is OK - if not, return false and add a message to the 'errors' array
return true;
}
@Override
public Object convertSubmission(Object input, ContentMap properties, Content content) {
//TODO - convert the submission to what should be persisted
// the "date" type, for example, converts a string data representation to a Date object
return input;
}
}
To Implement custom behavior, additional hooks can be added.
They must be registered Spring Beans, and they will automatically be made available.
package my.stuff;
import org.schicwp.dinky.workflow.ActionHook;
import org.schicwp.dinky.workflow.ActionHookFactory;
import org.springframework.stereotype.Component;
import java.util.Map;
@Component
public class MyHookFactory implements ActionHookFactory {
// name will be used in workflow yaml
@Override
public String getName() {
return "MyHook";
}
//"config" are settings from the workflow yaml
@Override
public ActionHook createActionHook(ContentMap config) {
//"actionConfig" is provided by submission
return (Content content,ContentMap actionConfig) -> {
//TODO - do stuff with content
};
}
}
bean | description | notes |
---|---|---|
ContentService | allows querying of the content database | should not be used to write content, otherwise, validation and workflow will be ignored. Use ContentSubmissionService to write content |
ContentSubmissionService | allows submission of content | |
SearchService | gives access to search indexes | see search for more info on search |
AuthService | gives access to current auth context |
In some cases, it may be needed to bypass the permission system that restricts users, for example, if there are async workflow actions which don’t have a security context associated with them.
@Autowired
AuthService authService;
@Autowired
ContentService contentService;
public void myBusiness(){
Object thing = authService.withSystemUser(()->{
return contentService.find(...);
});
}