dhd
I'm new here

Kopieren von Media.PICTURE Dateien via Scirpt

Jump to solution

Hallo Leute,

ich habe folgendes Problem. Ich will mir ein Skript bauen das automatisch eine Medien Datei vom Typ PICTURE kopiert.

Nun hab ich allerdings das Problem, dass ich sobald ich das Picture Element des neuen Media Objekts setzen will (newPicture.setPicture(...)) ein Exception geworfen wird. Exception ist unterhalb des Quellcodes.

Kann mir einer sagen wo mein Fehler liegt oder mach ich da was Grundsätzliches falsch?

Quellcode:

Listable<Media> mediaList = folder.getChildren(Media.class,false);

Iterator<Media> mediaListIterator = mediaList.iterator();

while (mediaListIterator.hasNext())

{

            // Bild das überprüft werden soll

            MediaImpl mediaPROD = (MediaImpl)mediaListIterator.next();

            // Eindeutige ID des Bildes

            String uid = mediaPROD.getUid();

            // Anhand der ID das Bild im neuen Projekt suchen.

            Media media = (Media)b2cMediaStore.getStoreElement(uid, UidType.MEDIASTORE_LEAF);

            // Datei noch nicht vorhanden?

            if (media == null && mediaPROD.getType() == Media.PICTURE)

            {

                // Gleichen Ordner im neuen Projekt suchen

                MediaFolder b2cRootMediaFolder =

                    (MediaFolder)b2cMediaStore.getStoreElement(folder.getName(),

                                                               UidType.MEDIASTORE_FOLDER);

                // Bild aus der Mediendatei laden

                Picture picturePROD = mediaPROD.getPicture(language);

                // Auflösung ermitteln

                Iterator<StoreElement> iterator = picturePROD.getChildren().iterator();

                while (iterator.hasNext())

                {

                    Object next2 = iterator.next();

                    // Handelt es sich um eine Bild Resolution?

                    if (PictureResolutionImpl.class.isInstance(next2))

                    {

                        PictureResolutionImpl impl = (PictureResolutionImpl)next2;   

                        // Displayname ist der Dateiname ohne Extension.

                        Map<Language,String> lang2DisplayName = new HashMap<Language, String>();

                        lang2DisplayName.put(language, mediaPROD.getDisplayName(language));

                        // Media Objekt erstellen.

                        Media newMedia = b2cRootMediaFolder.createMedia(uid,

                                                                        mediaPROD.getFilename(),

                                                                        Media.PICTURE,

                                                                        false,

                                                                        lang2DisplayName,

                                                                        false);

                        Picture newPicture = newMedia.getPicture(language);

                        newMedia.setLock(true);

                        Resolution resolution = impl.getResolution();

                        InputStream inputStream = picturePROD.getInputStream(resolution);

                        newPicture.setPicture(resolution,

                                                         impl.getSize(),

                                                         inputStream,

                                                         impl.getExtension());

                        newMedia.save();

                        newMedia.setLock(false);

                    }

                }

            }

}

Exception:

Exception in thread "main" de.espirit.common.io.IoError: java.lang.RuntimeException: - Unable to render RenderedOp for this operation.

    at de.espirit.common.imaging.DefaultImageIO.loadImageFromByteArray(DefaultImageIO.java:58)

    at de.espirit.common.imaging.j2se14.J2SE14ImageIO.loadImageFromByteArray(J2SE14ImageIO.java:52)

    at de.espirit.common.imaging.ImageUtil.loadImageFromByteArray(ImageUtil.java:75)

    at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:209)

    at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:208)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:662)

    at de.espirit.common.util.SuspendableThread.run(SuspendableThread.java:36)

Caused by: java.lang.RuntimeException: - Unable to render RenderedOp for this operation.

    at javax.media.jai.RenderedOp.createInstance(RenderedOp.java:813)

    at javax.media.jai.RenderedOp.createRendering(RenderedOp.java:853)

    at javax.media.jai.RenderedOp.getColorModel(RenderedOp.java:2198)

    at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2368)

    at javax.media.jai.PlanarImage.getAsBufferedImage(PlanarImage.java:2413)

    at de.espirit.common.imaging.DefaultImageIO.loadImageFromByteArray(DefaultImageIO.java:48)

    at de.espirit.common.imaging.j2se14.J2SE14ImageIO.loadImageFromByteArray(J2SE14ImageIO.java:52)

    at de.espirit.common.imaging.ImageUtil.loadImageFromByteArray(ImageUtil.java:75)

    at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:209)

    at de.espirit.firstspirit.server.mediamanagement.MediaManagerImpl$1.call(MediaManagerImpl.java:208)

    at de.espirit.firstspirit.server.ExecutionManagerImpl$ExtendedCallable.call(ExecutionManagerImpl.java:520)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at de.espirit.common.util.BoundedExecutorService$RunnableWrapper.run(BoundedExecutorService.java:419)

    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)

    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)

    at java.util.concurrent.FutureTask.run(FutureTask.java:138)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at de.espirit.firstspirit.client.io.ServerCaller.callManager(ServerCaller.java:372)

    at de.espirit.firstspirit.io.DefaultClientHandler.callManager(DefaultClientHandler.java:49)

    at de.espirit.firstspirit.client.io.RemoteManagerCaller.invoke(RemoteManagerCaller.java:52)

    at de.espirit.firstspirit.server.$Proxy21.uploadPicture(Unknown Source)

    at de.espirit.firstspirit.store.access.mediastore.PictureImpl.uploadPicture(PictureImpl.java:312)

    at de.espirit.firstspirit.store.access.mediastore.PictureImpl.setPicture(PictureImpl.java:186)

    at net.o4b.test.CheckRecipeMedia.checkMediaNames(CheckRecipeMedia.java:247)

0 Kudos
1 Solution

Accepted Solutions
dhd
I'm new here

Hat sich erledigt. Ich habe noch einen zwischenschritt Eingebaut indem ich die Datei erst local abspeicher bevor sie wieder ins FS geschrieben wird. So funktioniert es dann auch.

View solution in original post

0 Kudos
3 Replies
andre
I'm new here

generell sollte nicht mit "PictureResolutionImpl.class.isInstance(next2)" gearbeitet werden.

sondern de.espirit.firstspirit.access.project.Project#getResolutions und dann de.espirit.firstspirit.access.store.mediastore.Picture#getPictureResolution


Unable to render RenderedOp for this operation

besagt vermutl. das von dem ByteArray kein PreviewImage erstellt werden, also der Bild-Typ nicht unterstuetzt ist, evtl. null


0 Kudos

Das ermitteln der Resolution hab ich umgestellt.

Bei der Datei handelt es sich um eine ganz gewöhnliche .jpg Datei. Diese existiert ja auch bereits im Media Store und hat dort auch eine Preview. Somit wäre es doch komisch wenn er deshalb abbricht.

Gibt es ansonsten einen anderen Weg wie man eine Media Datei kopieren kann?

0 Kudos
dhd
I'm new here

Hat sich erledigt. Ich habe noch einen zwischenschritt Eingebaut indem ich die Datei erst local abspeicher bevor sie wieder ins FS geschrieben wird. So funktioniert es dann auch.

0 Kudos