package org.korsakow.domain.proxy; import java.io.FileNotFoundException; import java.util.Collection; import org.dsrg.soenea.domain.MapperException; import org.dsrg.soenea.domain.mapper.DomainObjectNotFoundException; import org.korsakow.domain.Media; import org.korsakow.domain.MediaSource; import org.korsakow.domain.interf.IKeyword; import org.korsakow.domain.interf.IMedia; import org.korsakow.domain.mapper.input.ImageInputMapper; import org.korsakow.domain.mapper.input.PatternInputMapper; import org.korsakow.domain.mapper.input.SoundInputMapper; import org.korsakow.domain.mapper.input.TextInputMapper; import org.korsakow.domain.mapper.input.VideoInputMapper; import org.korsakow.ide.DataRegistry; import org.w3c.dom.Element; /** * Doesn't subclass MediaProxy due to a bug in SOENEA which check for a certain class hiererarchy * @author d * */ public class UnknownMediaProxy extends KDomainObjectProxy<Media> implements IMedia { public UnknownMediaProxy(long id) { super(id); } @SuppressWarnings("unchecked") @Override public Class<Media> getInnerClass() { return (Class<Media>) getMedia().getClass(); } /** * Users cannot otherwise currently determine which type of media is being proxied... * @return */ public Media getMedia() { return getInnerObject(); } @Override protected Media getFromMapper(Long id) throws MapperException { Element element = DataRegistry.getHelper().findElementByIdTag(id); if (element == null) throw new DomainObjectNotFoundException("Object does not exist: " + id); String tagName = element.getTagName(); if ("Video".equals(tagName)) return VideoInputMapper.map(id); if ("Sound".equals(tagName)) return SoundInputMapper.map(id); if ("Image".equals(tagName)) return ImageInputMapper.map(id); if ("Text".equals(tagName)) return TextInputMapper.map(id); if ("Pattern".equals(tagName)) return PatternInputMapper.map(id); throw new DomainObjectNotFoundException("unknown media type for: " + id); } public String getName() { return getInnerObject().getName(); } public void setName(String name) { getInnerObject().setName(name); } public Collection<IKeyword> getKeywords() { return getInnerObject().getKeywords(); } public void setKeywords(Collection<IKeyword> keywords) { getInnerObject().setKeywords(keywords); } public void setSource(MediaSource source) { getInnerObject().setSource(source); } public MediaSource getSource() { return getInnerObject().getSource(); } public String getFilename() { return getInnerObject().getFilename(); } public void setFilename(String filename) { getInnerObject().setFilename(filename); } public String getAbsoluteFilename() throws FileNotFoundException { return getInnerObject().getAbsoluteFilename(); } public String getType() { return getInnerObject().getType(); } }