// Get the root
VirtualFile root = ctx.getRoot();
String deploymentPath = createRelativeDeploymentPath(root);
// Load previous saved information
RepositoryAttachmentMetaData repositoryMetaData = loadAttachmentMetaData(deploymentPath);
if(repositoryMetaData == null)
{
repositoryMetaData = RepositoryAttachmentMetaDataFactory.createInstance();
repositoryMetaData.setDeploymentName(root.getName());
}
// Get the parent MO
ManagedCommon parent = component;
while(parent.getParent() != null)
parent = parent.getParent();
// Get the managed object, as a component can also be a child of a managedObject
ManagedObject managedObject = component.getDeployment().getManagedObject(parent.getName());
if(managedObject == null && parent instanceof ManagedObject)
managedObject = (ManagedObject) parent;
// Get the current attachment
String attachmentName = managedObject.getAttachmentName();
List<AttachmentMetaData> attachments = repositoryMetaData.getAttachments();
if(attachments == null)
{
attachments = new ArrayList<AttachmentMetaData>();
repositoryMetaData.setAttachments(attachments);
}
// Extract the attachment
AttachmentMetaData attachment = null;
for(AttachmentMetaData a : attachments)
{
if(attachmentName.equals(a.getName()))
attachment = a;
}
// Create a new one
if(attachment == null)
{
// Create attachment meta data
attachment = new AttachmentMetaData();
// Add attachment meta data
attachments.add(attachment);
}
// Is attachmentName the same as the className ?
attachment.setName(attachmentName);
attachment.setClassName(managedObject.getAttachment().getClass().getName());
// Save the attachment
String attachmentPath = deploymentPath + attachment.getName();
// Create the persistence information
PersistenceRoot persistenceRoot = getSerializer().loadAttachment(attachmentPath, PersistenceRoot.class);
//
persistenceRoot = createPersistedMetaData(persistenceRoot, managedObject, component, remove);
// Serialize the attachment
getSerializer().saveAttachment(attachmentPath, persistenceRoot);
// Update the last modified.
long lastModified = System.currentTimeMillis();
attachment.setLastModified(lastModified);
repositoryMetaData.setLastModified(lastModified);
// Save the updated repository meta data
getSerializer().saveAttachment(getMetaDataPathName(deploymentPath), repositoryMetaData);
}