Seiteneigenschaften | ||||
---|---|---|---|---|
|
...
Wie schön wäre es doch, wenn der Integrator steuern könnte, ob Annotationen server- oder clientseitig gerendert werden sollen. Der einzige Grund für das zwingende serverseitige Rendern von Annotationen, die mit DENY.CHANGE && DENY.REMOVE belegt sind, war bisher der folgende:
Info |
---|
Unveränderliche Annotationen (also solche mit DENY.CHANGE && DENY.REMOVE) |
...
können dazu dienen, sensible Dokumentinhalte von unbefugten Anwendern zu verstecken. |
Aber: die beiden neuen Anwendungsfälle benutzen die Permissions DENY.CHANGE && DENY.REMOVE auf den Annotationen gar nicht zum Maskieren, sondern lediglich zum Schutz vor Veränderung!
...
Soweit, so gut. Über ein simples, clientseitiges Command lassen sich die Berechtigungen setzen und ein Neuzeichnen auslösen:
private final AbstractPageViewCommand cmdHide = new AbstractPageViewCommand() {
@Override
protected void execute() {
AnnotationPageSegment annoSegment = (AnnotationPageSegment) getPageView().getCurrentPage().getPageSegment(
DocumentLayer.ANNOTATIONS);for (Annotation annotation : annoSegment.getAnnotations()) {
if (annotation instanceof TextAnnotation) {
clearAnnoShowPermissions(annotation);
annotation.getPermissions().getPermissions().add(IndividualAnnotationPermission.DENY.SHOW);
}
}getPageView().repaint();
ToolManager tm = leftViewer.getPageView().getToolManager();
ThumbnailTool thumbnailTool = tm.getTool(ThumbnailTool.class);
thumbnailTool.getThumbnailView().repaint();
}
};
Einen kleinen Fallstrick gibt es jedoch dabei: möchte man, dass die DENY.SHOW-Permission beim Ausdrucken des Dokuments Anwendung findet (und somit die versteckten Annotationen auch im Ausdruck versteckt werden), so muss die Information, welche der Annotationen ausgeblendet sind, beim Ausdruck an den Server transportiert werden.
...
Ganz analog funktioniert das nun auch mit dem rein clientseitigen Umschalten der Änderungs- und Löschberechtigungen:
private final AbstractPageViewCommand cmdAllow = new AbstractPageViewCommand() {
@Override
protected void execute() {AnnotationPageSegment annoSegment = (AnnotationPageSegment) getPageView().getCurrentPage().getPageSegment(
DocumentLayer.ANNOTATIONS);for (Annotation annotation : annoSegment.getAnnotations()) {
clearAnnoChangeANDRemovePermissions(annotation);
annotation.getPermissions().getPermissions().add(IndividualAnnotationPermission.ALLOW.REMOVE);
annotation.getPermissions().getPermissions().add(IndividualAnnotationPermission.ALLOW.CHANGE);
}getPageView().repaint();
ThumbnailTool thumbnailTool = tm.getTool(ThumbnailTool.class);
thumbnailTool.getThumbnailView().repaint();}
};
Hier gibt es keine weiteren Tücken zu beachtetn.