use of org.xwiki.model.reference.AttachmentReference in project xwiki-platform by xwiki.
the class AttachmentURLStreamHandlerTest method testAttachmentJarURL.
@Test
public void testAttachmentJarURL() throws Exception {
URL url = new URL(null, "attachmentjar://Space.Page@filename", (URLStreamHandler) this.handler);
final AttachmentReference attachmentReference = new AttachmentReference("filename", new DocumentReference("wiki", "space", "page"));
getMockery().checking(new Expectations() {
{
oneOf(AttachmentURLStreamHandlerTest.this.arf).resolve("Space.Page@filename");
will(returnValue(attachmentReference));
oneOf(AttachmentURLStreamHandlerTest.this.dab).getAttachmentContent(attachmentReference);
will(returnValue(new ByteArrayInputStream("content".getBytes())));
}
});
URLConnection connection = url.openConnection();
InputStream input = null;
try {
connection.connect();
input = connection.getInputStream();
Assert.assertEquals("content", IOUtils.toString(input));
} finally {
if (input != null) {
input.close();
}
}
}
use of org.xwiki.model.reference.AttachmentReference in project xwiki-platform by xwiki.
the class AttachmentUnifiedDiffBuilder method addAttachmentDiff.
/**
* Computes the differences, in unified format, between two versions of an attachment and adds the result to the
* given {@link DocumentUnifiedDiff}.
*
* @param previousAttachment the previous version of the attachment
* @param nextAttachment the next version of the attachment
* @param documentDiff where to add the differences
*/
public void addAttachmentDiff(XWikiAttachment previousAttachment, XWikiAttachment nextAttachment, DocumentUnifiedDiff documentDiff) {
AttachmentReference previousReference = getAttachmentVersionReference(previousAttachment, documentDiff.getPreviousReference());
AttachmentReference nextReference = getAttachmentVersionReference(nextAttachment, documentDiff.getNextReference());
EntityUnifiedDiff<AttachmentReference> attachmentDiff = new EntityUnifiedDiff<>(previousReference, nextReference);
if ((previousAttachment == null || isSmallTextFile(previousAttachment)) && (nextAttachment == null || isSmallTextFile(nextAttachment))) {
// Compute content differences.
maybeAddDiff(attachmentDiff, CONTENT, getContentAsString(previousAttachment), getContentAsString(nextAttachment));
} else {
// The size difference is useful when the content difference is not shown.
maybeAddDiff(attachmentDiff, "size", previousAttachment == null ? null : previousAttachment.getLongSize(), nextAttachment == null ? null : nextAttachment.getLongSize());
if (attachmentDiff.isEmpty() && !contentEquals(previousAttachment, nextAttachment)) {
// If the files have the same size but the content is different then show an empty list.
attachmentDiff.put(CONTENT, Collections.<UnifiedDiffBlock<String, Character>>emptyList());
}
}
if (attachmentDiff.size() > 0) {
documentDiff.getAttachmentDiffs().add(attachmentDiff);
}
}
use of org.xwiki.model.reference.AttachmentReference in project xwiki-platform by xwiki.
the class FSPathStringEntityReferenceSerializerTest method serialize.
@Test
public void serialize() throws Exception {
DocumentReference documentReference = new DocumentReference("wik.i", "spac.e", "pag.e");
AttachmentReference attachmentReference = new AttachmentReference("image.png", documentReference);
String result = this.mocker.getComponentUnderTest().serialize(attachmentReference);
assertEquals("wik%2Ei/spac%2Ee/pag%2Ee/image.png", result);
}
use of org.xwiki.model.reference.AttachmentReference in project xwiki-platform by xwiki.
the class DefaultOfficeResourceViewer method createView.
@Override
public XDOM createView(ResourceReference reference, Map<String, ?> parameters) throws Exception {
OfficeDocumentView view;
if (reference.getType().equals(ResourceType.ATTACHMENT) || reference.getType().equals(ResourceType.UNKNOWN)) {
AttachmentReference attachmentReference = this.attachmentResolver.resolve(reference.getReference());
view = getView(reference, attachmentReference, parameters);
} else {
view = getView(reference, parameters);
}
// transformations must be executed even when the XDOM is taken from the cache.
return view.getXDOM().clone();
}
use of org.xwiki.model.reference.AttachmentReference in project xwiki-platform by xwiki.
the class DefaultOfficeResourceViewerTest method testViewPresentation.
@Test
public void testViewPresentation() throws Exception {
AttachmentResourceReference attachResourceRef = new AttachmentResourceReference("xwiki:Some.Page@presentation.odp");
DocumentReference documentReference = new DocumentReference("wiki", "Some", "Page");
AttachmentReference attachmentReference = new AttachmentReference("presentation.odp", documentReference);
AttachmentReferenceResolver<String> attachmentReferenceResolver = mocker.getInstance(AttachmentReferenceResolver.TYPE_STRING, "current");
when(attachmentReferenceResolver.resolve(attachResourceRef.getReference())).thenReturn(attachmentReference);
when(documentAccessBridge.getAttachmentReferences(attachmentReference.getDocumentReference())).thenReturn(Arrays.asList(attachmentReference));
when(documentAccessBridge.getAttachmentVersion(attachmentReference)).thenReturn("3.2");
ByteArrayInputStream attachmentContent = new ByteArrayInputStream(new byte[256]);
when(documentAccessBridge.getAttachmentContent(attachmentReference)).thenReturn(attachmentContent);
ResourceReference imageReference = new ResourceReference("slide0.png", ResourceType.URL);
ExpandedMacroBlock galleryMacro = new ExpandedMacroBlock("gallery", Collections.singletonMap("width", "300px"), null, false);
galleryMacro.addChild(new ImageBlock(imageReference, true));
XDOM xdom = new XDOM(Collections.<Block>singletonList(galleryMacro));
Map<String, byte[]> artifacts = Collections.singletonMap("slide0.png", new byte[8]);
XDOMOfficeDocument xdomOfficeDocument = new XDOMOfficeDocument(xdom, artifacts, mocker);
PresentationBuilder presentationBuilder = mocker.getInstance(PresentationBuilder.class);
when(presentationBuilder.build(attachmentContent, attachmentReference.getName(), documentReference)).thenReturn(xdomOfficeDocument);
Map<String, ?> viewParameters = Collections.singletonMap("ownerDocument", documentReference);
TemporaryResourceReference temporaryResourceReference = new TemporaryResourceReference("officeviewer", Arrays.asList(String.valueOf(viewParameters.hashCode()), "slide0.png"), documentReference);
Type type = new DefaultParameterizedType(null, ResourceReferenceSerializer.class, TemporaryResourceReference.class, ExtendedURL.class);
ResourceReferenceSerializer<TemporaryResourceReference, ExtendedURL> urlTemporaryResourceReferenceSerializer = mocker.getInstance(type, "standard/tmp");
ExtendedURL extendedURL = new ExtendedURL(Arrays.asList("url", "to", "slide0.png"));
when(urlTemporaryResourceReferenceSerializer.serialize(temporaryResourceReference)).thenReturn(extendedURL);
XDOM output = this.mocker.getComponentUnderTest().createView(attachResourceRef, viewParameters);
ImageBlock imageBlock = (ImageBlock) output.getBlocks(new ClassBlockMatcher(ImageBlock.class), Block.Axes.DESCENDANT).get(0);
assertEquals("/url/to/slide0.png", imageBlock.getReference().getReference());
galleryMacro = (ExpandedMacroBlock) output.getBlocks(new ClassBlockMatcher(ExpandedMacroBlock.class), Block.Axes.DESCENDANT).get(0);
assertFalse(galleryMacro.getParent() instanceof XDOM);
assertEquals(Syntax.XWIKI_2_1, ((MetaDataBlock) galleryMacro.getParent()).getMetaData().getMetaData(MetaData.SYNTAX));
TemporaryResourceStore store = mocker.getInstance(TemporaryResourceStore.class);
verify(store).createTemporaryFile(eq(temporaryResourceReference), any(InputStream.class));
}
Aggregations