blob: b766e92e04ebc77652fe5cf9b2ff70580485ac2b [file] [log] [blame]
/**
* Copyright (c) 2011, 2016 - Loetz GmbH&Co.KG (69115 Heidelberg, Germany)
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Christophe Loetz (Loetz GmbH&Co.KG) - initial implementation
*/
package org.eclipse.osbp.blob.dtos;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import org.eclipse.osbp.blob.dtos.ContentTypeDto;
import org.eclipse.osbp.dsl.common.datatypes.IDto;
import org.eclipse.osbp.runtime.common.annotations.Dirty;
import org.eclipse.osbp.runtime.common.annotations.Dispose;
import org.eclipse.osbp.runtime.common.annotations.DomainReference;
@SuppressWarnings("all")
public class MimeTypeDto implements IDto, Serializable, PropertyChangeListener {
private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
@Dispose
private boolean disposed;
@Dirty
private transient boolean dirty;
private String mimeVersion;
private String contentTransferEncoding;
@DomainReference
private List<ContentTypeDto> contentTypeList;
public MimeTypeDto() {
installLazyCollections();
}
/**
* Installs lazy collection resolving for entity {@link MimeType} to the dto {@link MimeTypeDto}.
*
*/
protected void installLazyCollections() {
}
/**
* @return true, if the object is disposed.
* Disposed means, that it is prepared for garbage collection and may not be used anymore.
* Accessing objects that are already disposed will cause runtime exceptions.
*
*/
public boolean isDisposed() {
return this.disposed;
}
/**
* @see PropertyChangeSupport#addPropertyChangeListener(PropertyChangeListener)
*/
public void addPropertyChangeListener(final PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(listener);
}
/**
* @see PropertyChangeSupport#addPropertyChangeListener(String, PropertyChangeListener)
*/
public void addPropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
propertyChangeSupport.addPropertyChangeListener(propertyName, listener);
}
/**
* @see PropertyChangeSupport#removePropertyChangeListener(PropertyChangeListener)
*/
public void removePropertyChangeListener(final PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(listener);
}
/**
* @see PropertyChangeSupport#removePropertyChangeListener(String, PropertyChangeListener)
*/
public void removePropertyChangeListener(final String propertyName, final PropertyChangeListener listener) {
propertyChangeSupport.removePropertyChangeListener(propertyName, listener);
}
/**
* @see PropertyChangeSupport#firePropertyChange(String, Object, Object)
*/
public void firePropertyChange(final String propertyName, final Object oldValue, final Object newValue) {
propertyChangeSupport.firePropertyChange(propertyName, oldValue, newValue);
}
/**
* @return true, if the object is dirty.
*
*/
public boolean isDirty() {
return dirty;
}
/**
* Sets the dirty state of this object.
*
*/
public void setDirty(final boolean dirty) {
firePropertyChange("dirty", this.dirty, this.dirty = dirty );
}
/**
* Checks whether the object is disposed.
* @throws RuntimeException if the object is disposed.
*/
private void checkDisposed() {
if (isDisposed()) {
throw new RuntimeException("Object already disposed: " + this);
}
}
/**
* Calling dispose will destroy that instance. The internal state will be
* set to 'disposed' and methods of that object must not be used anymore.
* Each call will result in runtime exceptions.<br/>
* If this object keeps composition containments, these will be disposed too.
* So the whole composition containment tree will be disposed on calling this method.
*/
@Dispose
public void dispose() {
if (isDisposed()) {
return;
}
firePropertyChange("disposed", this.disposed, this.disposed = true);
}
/**
* Returns the mimeVersion property or <code>null</code> if not present.
*/
public String getMimeVersion() {
return this.mimeVersion;
}
/**
* Sets the <code>mimeVersion</code> property to this instance.
*
* @param mimeVersion - the property
* @throws RuntimeException if instance is <code>disposed</code>
*
*/
public void setMimeVersion(final String mimeVersion) {
firePropertyChange("mimeVersion", this.mimeVersion, this.mimeVersion = mimeVersion );
}
/**
* Returns the contentTransferEncoding property or <code>null</code> if not present.
*/
public String getContentTransferEncoding() {
return this.contentTransferEncoding;
}
/**
* Sets the <code>contentTransferEncoding</code> property to this instance.
*
* @param contentTransferEncoding - the property
* @throws RuntimeException if instance is <code>disposed</code>
*
*/
public void setContentTransferEncoding(final String contentTransferEncoding) {
firePropertyChange("contentTransferEncoding", this.contentTransferEncoding, this.contentTransferEncoding = contentTransferEncoding );
}
/**
* Returns an unmodifiable list of contentTypeList.
*/
public List<ContentTypeDto> getContentTypeList() {
return Collections.unmodifiableList(internalGetContentTypeList());
}
/**
* Returns the list of <code>ContentTypeDto</code>s thereby lazy initializing it. For internal use only!
*
* @return list - the resulting list
*
*/
public List<ContentTypeDto> internalGetContentTypeList() {
if (this.contentTypeList == null) {
this.contentTypeList = new java.util.ArrayList<ContentTypeDto>();
}
return this.contentTypeList;
}
/**
* Adds the given contentTypeDto to this object. <p>
*
* @param contentTypeDto - the property
* @throws RuntimeException if instance is <code>disposed</code>
*
*/
public void addToContentTypeList(final ContentTypeDto contentTypeDto) {
checkDisposed();
if(!internalGetContentTypeList().contains(contentTypeDto)){
internalAddToContentTypeList(contentTypeDto);
}
}
public void removeFromContentTypeList(final ContentTypeDto contentTypeDto) {
checkDisposed();
internalRemoveFromContentTypeList(contentTypeDto);
}
/**
* For internal use only!
*/
public void internalAddToContentTypeList(final ContentTypeDto contentTypeDto) {
// add this as property change listener for embeddable beans
contentTypeDto.addPropertyChangeListener(this);
if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
if(!internalGetContentTypeList().contains(contentTypeDto)) {
List<ContentTypeDto> oldList = null;
if(internalGetContentTypeList() instanceof org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) {
oldList = ((org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) internalGetContentTypeList()).copy();
} else {
oldList = new java.util.ArrayList<>(internalGetContentTypeList());
}
internalGetContentTypeList().add(contentTypeDto);
firePropertyChange("contentTypeList", oldList, internalGetContentTypeList());
}
}
}
/**
* For internal use only!
*/
public void internalRemoveFromContentTypeList(final ContentTypeDto contentTypeDto) {
// remove this as property change listener from the embeddable bean
contentTypeDto.removePropertyChangeListener(this);
if(!org.eclipse.osbp.dsl.dto.lib.MappingContext.isMappingMode()) {
List<ContentTypeDto> oldList = null;
if(internalGetContentTypeList() instanceof org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) {
oldList = ((org.eclipse.osbp.dsl.dto.lib.AbstractOppositeDtoList) internalGetContentTypeList()).copy();
} else {
oldList = new java.util.ArrayList<>(internalGetContentTypeList());
}
internalGetContentTypeList().remove(contentTypeDto);
firePropertyChange("contentTypeList", oldList, internalGetContentTypeList());
}else{
// in mapping mode, we do NOT resolve any collection
internalGetContentTypeList().remove(contentTypeDto);
}
}
/**
* Sets the <code>contentTypeList</code> property to this instance.
*
* @param contentTypeList - the property
* @throws RuntimeException if instance is <code>disposed</code>
*
*/
public void setContentTypeList(final List<ContentTypeDto> contentTypeList) {
checkDisposed();
for (ContentTypeDto dto : internalGetContentTypeList().toArray(new ContentTypeDto[this.contentTypeList.size()])) {
removeFromContentTypeList(dto);
}
if(contentTypeList == null) {
return;
}
for (ContentTypeDto dto : contentTypeList) {
addToContentTypeList(dto);
}
}
public void propertyChange(final java.beans.PropertyChangeEvent event) {
Object source = event.getSource();
// forward the event from embeddable beans to all listeners. So the parent of the embeddable
// bean will become notified and its dirty state can be handled properly
if(source == contentTypeList){
firePropertyChange("contentTypeList" + "_" + event.getPropertyName(), event.getOldValue(), event.getNewValue());
} else
{
// no super class available to forward event
}
}
}