mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
ConfigFileFactoryImpl -> idea-ui
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.intellij.util.descriptors.impl;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.MultiValuesMap;
|
||||
import com.intellij.openapi.vfs.*;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
import com.intellij.util.descriptors.*;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ConfigFileContainerImpl implements ConfigFileContainer {
|
||||
private final Project myProject;
|
||||
private final EventDispatcher<ConfigFileListener> myDispatcher = EventDispatcher.create(ConfigFileListener.class);
|
||||
private final MultiValuesMap<ConfigFileMetaData, ConfigFile> myConfigFiles = new MultiValuesMap<ConfigFileMetaData, ConfigFile>();
|
||||
private ConfigFile[] myCachedConfigFiles;
|
||||
private final ConfigFileMetaDataProvider myMetaDataProvider;
|
||||
private final ConfigFileInfoSetImpl myConfiguration;
|
||||
|
||||
public ConfigFileContainerImpl(final Project project, final ConfigFileMetaDataProvider descriptorMetaDataProvider,
|
||||
final ConfigFileInfoSetImpl configuration) {
|
||||
myConfiguration = configuration;
|
||||
myMetaDataProvider = descriptorMetaDataProvider;
|
||||
myProject = project;
|
||||
VirtualFileManager.getInstance().addVirtualFileListener(new VirtualFileAdapter() {
|
||||
public void propertyChanged(final VirtualFilePropertyEvent event) {
|
||||
fileChanged(event.getFile());
|
||||
}
|
||||
|
||||
public void fileMoved(final VirtualFileMoveEvent event) {
|
||||
fileChanged(event.getFile());
|
||||
}
|
||||
}, this);
|
||||
myConfiguration.setContainer(this);
|
||||
}
|
||||
|
||||
private void fileChanged(final VirtualFile file) {
|
||||
for (ConfigFile descriptor : myConfigFiles.values()) {
|
||||
final VirtualFile virtualFile = descriptor.getVirtualFile();
|
||||
if (virtualFile != null && VfsUtil.isAncestor(file, virtualFile, false)) {
|
||||
myConfiguration.updateConfigFile(descriptor);
|
||||
fireDescriptorChanged(descriptor);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ConfigFile getConfigFile(ConfigFileMetaData metaData) {
|
||||
final Collection<ConfigFile> descriptors = myConfigFiles.get(metaData);
|
||||
if (descriptors == null || descriptors.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return descriptors.iterator().next();
|
||||
}
|
||||
|
||||
public ConfigFile[] getConfigFiles() {
|
||||
if (myCachedConfigFiles == null) {
|
||||
final Collection<ConfigFile> descriptors = myConfigFiles.values();
|
||||
myCachedConfigFiles = descriptors.toArray(new ConfigFile[descriptors.size()]);
|
||||
}
|
||||
return myCachedConfigFiles;
|
||||
}
|
||||
|
||||
public Project getProject() {
|
||||
return myProject;
|
||||
}
|
||||
|
||||
public void addListener(final ConfigFileListener listener, final Disposable parentDisposable) {
|
||||
myDispatcher.addListener(listener, parentDisposable);
|
||||
}
|
||||
|
||||
public void fireDescriptorChanged(final ConfigFile descriptor) {
|
||||
myDispatcher.getMulticaster().configFileChanged(descriptor);
|
||||
}
|
||||
|
||||
|
||||
public ConfigFileInfoSet getConfiguration() {
|
||||
return myConfiguration;
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
int i = 0;
|
||||
}
|
||||
|
||||
public void addListener(final ConfigFileListener listener) {
|
||||
myDispatcher.addListener(listener);
|
||||
}
|
||||
|
||||
public void removeListener(final ConfigFileListener listener) {
|
||||
myDispatcher.removeListener(listener);
|
||||
}
|
||||
|
||||
public ConfigFileMetaDataProvider getMetaDataProvider() {
|
||||
return myMetaDataProvider;
|
||||
}
|
||||
|
||||
public void updateDescriptors(final MultiValuesMap<ConfigFileMetaData, ConfigFileInfo> descriptorsMap) {
|
||||
Set<ConfigFile> toDelete = new HashSet<ConfigFile>(myConfigFiles.values());
|
||||
Set<ConfigFile> added = new HashSet<ConfigFile>();
|
||||
|
||||
for (Map.Entry<ConfigFileMetaData, Collection<ConfigFileInfo>> entry : descriptorsMap.entrySet()) {
|
||||
ConfigFileMetaData metaData = entry.getKey();
|
||||
Set<ConfigFileInfo> newDescriptors = new HashSet<ConfigFileInfo>(entry.getValue());
|
||||
final Collection<ConfigFile> oldDescriptors = myConfigFiles.get(metaData);
|
||||
if (oldDescriptors != null) {
|
||||
for (ConfigFile descriptor : oldDescriptors) {
|
||||
if (newDescriptors.contains(descriptor.getInfo())) {
|
||||
newDescriptors.remove(descriptor.getInfo());
|
||||
toDelete.remove(descriptor);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (ConfigFileInfo configuration : newDescriptors) {
|
||||
final ConfigFileImpl configFile = new ConfigFileImpl(this, configuration);
|
||||
myConfigFiles.put(metaData, configFile);
|
||||
added.add(configFile);
|
||||
}
|
||||
}
|
||||
|
||||
for (ConfigFile descriptor : toDelete) {
|
||||
myConfigFiles.remove(descriptor.getMetaData(), descriptor);
|
||||
}
|
||||
|
||||
myCachedConfigFiles = null;
|
||||
for (ConfigFile configFile : added) {
|
||||
myDispatcher.getMulticaster().configFileAdded(configFile);
|
||||
}
|
||||
for (ConfigFile configFile : toDelete) {
|
||||
myDispatcher.getMulticaster().configFileRemoved(configFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,104 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.intellij.util.descriptors.impl;
|
||||
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.fileTemplates.FileTemplate;
|
||||
import com.intellij.ide.fileTemplates.FileTemplateManager;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.util.FileContentUtil;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.descriptors.*;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ConfigFileFactoryImpl extends ConfigFileFactory {
|
||||
|
||||
public ConfigFileMetaDataProvider createMetaDataProvider(final ConfigFileMetaData... metaDatas) {
|
||||
return new ConfigFileMetaDataRegistryImpl(metaDatas);
|
||||
}
|
||||
|
||||
public ConfigFileMetaDataRegistry createMetaDataRegistry() {
|
||||
return new ConfigFileMetaDataRegistryImpl();
|
||||
}
|
||||
|
||||
public ConfigFileInfoSet createConfigFileInfoSet(final ConfigFileMetaDataProvider metaDataProvider) {
|
||||
return new ConfigFileInfoSetImpl(metaDataProvider);
|
||||
}
|
||||
|
||||
public ConfigFileContainer createConfigFileContainer(final Project project, final ConfigFileMetaDataProvider metaDataProvider,
|
||||
final ConfigFileInfoSet configuration) {
|
||||
return new ConfigFileContainerImpl(project, metaDataProvider, (ConfigFileInfoSetImpl)configuration);
|
||||
}
|
||||
|
||||
public CustomConfigFileSet createCustomConfigFileSet() {
|
||||
return new CustomConfigFileSetImpl();
|
||||
}
|
||||
|
||||
private static String getText(final String templateName) throws IOException {
|
||||
final FileTemplateManager templateManager = FileTemplateManager.getInstance();
|
||||
final FileTemplate template = templateManager.getJ2eeTemplate(templateName);
|
||||
if (template == null) {
|
||||
return "";
|
||||
}
|
||||
return template.getText(templateManager.getDefaultProperties());
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public VirtualFile createFile(@Nullable Project project, String url, ConfigFileVersion version, final boolean forceNew) {
|
||||
return createFileFromTemplate(project, url, version.getTemplateName(), forceNew);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private VirtualFile createFileFromTemplate(@Nullable final Project project, String url, final String templateName, final boolean forceNew) {
|
||||
final LocalFileSystem fileSystem = LocalFileSystem.getInstance();
|
||||
final File file = new File(VfsUtil.urlToPath(url));
|
||||
final VirtualFile existingFile = fileSystem.refreshAndFindFileByIoFile(file);
|
||||
if (existingFile != null && !forceNew) {
|
||||
return existingFile;
|
||||
}
|
||||
try {
|
||||
String text = getText(templateName);
|
||||
final VirtualFile childData;
|
||||
if (existingFile == null || existingFile.isDirectory()) {
|
||||
final VirtualFile virtualFile;
|
||||
if (!FileUtil.createParentDirs(file) ||
|
||||
(virtualFile = fileSystem.refreshAndFindFileByIoFile(file.getParentFile())) == null) {
|
||||
throw new IOException(IdeBundle.message("error.message.unable.to.create.file", file.getPath()));
|
||||
}
|
||||
childData = virtualFile.createChildData(this, file.getName());
|
||||
}
|
||||
else {
|
||||
childData = existingFile;
|
||||
}
|
||||
FileContentUtil.setFileText(project, childData, text);
|
||||
return childData;
|
||||
}
|
||||
catch (final IOException e) {
|
||||
ApplicationManager.getApplication().invokeLater(new Runnable() {
|
||||
public void run() {
|
||||
Messages.showErrorDialog(IdeBundle.message("message.text.error.creating.deployment.descriptor", e.getLocalizedMessage()),
|
||||
IdeBundle.message("message.text.creating.deployment.descriptor"));
|
||||
}
|
||||
});
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public ConfigFileContainer createSingleFileContainer(Project project, ConfigFileMetaData metaData) {
|
||||
final ConfigFileMetaDataProvider metaDataProvider = createMetaDataProvider(metaData);
|
||||
return createConfigFileContainer(project, metaDataProvider, createConfigFileInfoSet(metaDataProvider));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,125 @@
|
||||
/*
|
||||
* Copyright (c) 2007, Your Corporation. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.intellij.util.descriptors.impl;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.pointers.VirtualFilePointer;
|
||||
import com.intellij.openapi.vfs.pointers.VirtualFilePointerListener;
|
||||
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.xml.XmlDocument;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
import com.intellij.util.descriptors.ConfigFile;
|
||||
import com.intellij.util.descriptors.ConfigFileInfo;
|
||||
import com.intellij.util.descriptors.ConfigFileMetaData;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ConfigFileImpl implements ConfigFile {
|
||||
@NotNull private ConfigFileInfo myInfo;
|
||||
private VirtualFilePointer myFilePointer;
|
||||
private PsiFile myPsiFile;
|
||||
private final ConfigFileContainerImpl myContainer;
|
||||
private final Project myProject;
|
||||
private long myModificationCount;
|
||||
private final VirtualFilePointerListener myListener = new VirtualFilePointerListener() {
|
||||
public void beforeValidityChanged(final VirtualFilePointer[] pointers) {
|
||||
}
|
||||
|
||||
public void validityChanged(final VirtualFilePointer[] pointers) {
|
||||
myPsiFile = null;
|
||||
onChange();
|
||||
}
|
||||
};
|
||||
|
||||
public ConfigFileImpl(@NotNull final ConfigFileContainerImpl container, @NotNull final ConfigFileInfo configuration) {
|
||||
myContainer = container;
|
||||
myInfo = configuration;
|
||||
setUrl(configuration.getUrl());
|
||||
Disposer.register(container, this);
|
||||
myProject = myContainer.getProject();
|
||||
}
|
||||
|
||||
private void setUrl(String url) {
|
||||
final VirtualFilePointerManager pointerManager = VirtualFilePointerManager.getInstance();
|
||||
myFilePointer = pointerManager.create(url, this, myListener);
|
||||
onChange();
|
||||
}
|
||||
|
||||
private void onChange() {
|
||||
myModificationCount++;
|
||||
myContainer.fireDescriptorChanged(this);
|
||||
}
|
||||
|
||||
public String getUrl() {
|
||||
return myFilePointer.getUrl();
|
||||
}
|
||||
|
||||
public void setInfo(@NotNull final ConfigFileInfo info) {
|
||||
myInfo = info;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public VirtualFile getVirtualFile() {
|
||||
return myFilePointer.getFile();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public synchronized PsiFile getPsiFile() {
|
||||
if (myPsiFile != null && myPsiFile.isValid()) {
|
||||
return myPsiFile;
|
||||
}
|
||||
|
||||
VirtualFile virtualFile = getVirtualFile();
|
||||
if (virtualFile == null || !virtualFile.isValid()) return null;
|
||||
|
||||
myPsiFile = PsiManager.getInstance(myProject).findFile(virtualFile);
|
||||
|
||||
return myPsiFile;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public XmlFile getXmlFile() {
|
||||
final PsiFile file = getPsiFile();
|
||||
return file instanceof XmlFile ? (XmlFile)file : null;
|
||||
}
|
||||
|
||||
public void dispose() {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ConfigFileInfo getInfo() {
|
||||
return myInfo;
|
||||
}
|
||||
|
||||
public boolean isValid() {
|
||||
final PsiFile psiFile = getPsiFile();
|
||||
if (psiFile == null || !psiFile.isValid()) {
|
||||
return false;
|
||||
}
|
||||
if (psiFile instanceof XmlFile) {
|
||||
final XmlDocument document = ((XmlFile)psiFile).getDocument();
|
||||
return document != null && document.getRootTag() != null;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public ConfigFileMetaData getMetaData() {
|
||||
return myInfo.getMetaData();
|
||||
}
|
||||
|
||||
|
||||
public long getModificationCount() {
|
||||
return myModificationCount;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.intellij.util.descriptors.impl;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.MultiValuesMap;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.util.descriptors.*;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ConfigFileInfoSetImpl implements ConfigFileInfoSet {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.util.descriptors.impl.ConfigFileInfoSetImpl");
|
||||
@NonNls private static final String ELEMENT_NAME = "deploymentDescriptor";
|
||||
@NonNls private static final String ID_ATTRIBUTE = "name";
|
||||
@NonNls private static final String URL_ATTRIBUTE = "url";
|
||||
private final MultiValuesMap<ConfigFileMetaData, ConfigFileInfo> myConfigFiles = new MultiValuesMap<ConfigFileMetaData, ConfigFileInfo>();
|
||||
private @Nullable ConfigFileContainerImpl myContainer;
|
||||
private final ConfigFileMetaDataProvider myMetaDataProvider;
|
||||
|
||||
public ConfigFileInfoSetImpl(final @NotNull ConfigFileContainerImpl container) {
|
||||
myContainer = container;
|
||||
myMetaDataProvider = container.getMetaDataProvider();
|
||||
}
|
||||
|
||||
public ConfigFileInfoSetImpl(final ConfigFileMetaDataProvider metaDataProvider) {
|
||||
myMetaDataProvider = metaDataProvider;
|
||||
}
|
||||
|
||||
public void addConfigFile(ConfigFileInfo descriptor) {
|
||||
myConfigFiles.put(descriptor.getMetaData(), descriptor);
|
||||
onChange();
|
||||
}
|
||||
|
||||
public void addConfigFile(final ConfigFileMetaData metaData, final String url) {
|
||||
addConfigFile(new ConfigFileInfo(metaData, url));
|
||||
}
|
||||
|
||||
public void removeConfigFile(ConfigFileInfo descriptor) {
|
||||
myConfigFiles.remove(descriptor.getMetaData(), descriptor);
|
||||
onChange();
|
||||
}
|
||||
|
||||
public void replaceConfigFile(final ConfigFileMetaData metaData, final String newUrl) {
|
||||
myConfigFiles.removeAll(metaData);
|
||||
addConfigFile(new ConfigFileInfo(metaData, newUrl));
|
||||
}
|
||||
|
||||
public ConfigFileInfo updateConfigFile(ConfigFile configFile) {
|
||||
myConfigFiles.remove(configFile.getMetaData(), configFile.getInfo());
|
||||
ConfigFileInfo info = new ConfigFileInfo(configFile.getMetaData(), configFile.getUrl());
|
||||
myConfigFiles.put(info.getMetaData(), info);
|
||||
((ConfigFileImpl)configFile).setInfo(info);
|
||||
return info;
|
||||
}
|
||||
|
||||
public void removeConfigFiles(final ConfigFileMetaData... metaData) {
|
||||
for (ConfigFileMetaData data : metaData) {
|
||||
myConfigFiles.removeAll(data);
|
||||
}
|
||||
onChange();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Collection<ConfigFileInfo> getDescriptors(ConfigFileMetaData metaData) {
|
||||
final Collection<ConfigFileInfo> collection = myConfigFiles.get(metaData);
|
||||
return collection != null ? Collections.unmodifiableCollection(collection) : Collections.<ConfigFileInfo>emptyList();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ConfigFileInfo getConfigFileInfo(ConfigFileMetaData metaData) {
|
||||
final Collection<ConfigFileInfo> descriptors = myConfigFiles.get(metaData);
|
||||
if (descriptors == null || descriptors.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
return descriptors.iterator().next();
|
||||
}
|
||||
|
||||
public ConfigFileInfo[] getConfigFileInfos() {
|
||||
final Collection<ConfigFileInfo> configurations = myConfigFiles.values();
|
||||
return configurations.toArray(new ConfigFileInfo[configurations.size()]);
|
||||
}
|
||||
|
||||
public void setConfigFileInfos(final Collection<ConfigFileInfo> descriptors) {
|
||||
myConfigFiles.clear();
|
||||
for (ConfigFileInfo descriptor : descriptors) {
|
||||
myConfigFiles.put(descriptor.getMetaData(), descriptor);
|
||||
}
|
||||
onChange();
|
||||
}
|
||||
|
||||
private void onChange() {
|
||||
if (myContainer != null) {
|
||||
myContainer.updateDescriptors(myConfigFiles);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ConfigFileMetaDataProvider getMetaDataProvider() {
|
||||
return myMetaDataProvider;
|
||||
}
|
||||
|
||||
public void readExternal(final Element element) throws InvalidDataException {
|
||||
myConfigFiles.clear();
|
||||
List<Element> children = element.getChildren(ELEMENT_NAME);
|
||||
for (Element child : children) {
|
||||
final String id = child.getAttributeValue(ID_ATTRIBUTE);
|
||||
if (id != null) {
|
||||
final ConfigFileMetaData metaData = myMetaDataProvider.findMetaData(id);
|
||||
if (metaData != null) {
|
||||
final String url = child.getAttributeValue(URL_ATTRIBUTE);
|
||||
myConfigFiles.put(metaData, new ConfigFileInfo(metaData, url));
|
||||
}
|
||||
}
|
||||
}
|
||||
onChange();
|
||||
}
|
||||
|
||||
@SuppressWarnings({"HardCodedStringLiteral"})
|
||||
public void writeExternal(final Element element) throws WriteExternalException {
|
||||
final TreeSet<ConfigFileInfo> sortedConfigFiles = new TreeSet<ConfigFileInfo>(new Comparator<ConfigFileInfo>() {
|
||||
public int compare(final ConfigFileInfo o1, final ConfigFileInfo o2) {
|
||||
final int id = Comparing.compare(o1.getMetaData().getId(), o2.getMetaData().getId());
|
||||
return id != 0? id : Comparing.compare(o1.getUrl(), o2.getUrl());
|
||||
}
|
||||
});
|
||||
sortedConfigFiles.addAll(myConfigFiles.collectValues());
|
||||
for (ConfigFileInfo configuration : sortedConfigFiles) {
|
||||
final Element child = new Element(ELEMENT_NAME);
|
||||
final ConfigFileMetaData metaData = configuration.getMetaData();
|
||||
child.setAttribute(ID_ATTRIBUTE, metaData.getId());
|
||||
child.setAttribute(URL_ATTRIBUTE, configuration.getUrl());
|
||||
element.addContent(child);
|
||||
}
|
||||
}
|
||||
|
||||
public void setContainer(@NotNull ConfigFileContainerImpl container) {
|
||||
LOG.assertTrue(myContainer == null);
|
||||
myContainer = container;
|
||||
myContainer.updateDescriptors(myConfigFiles);
|
||||
}
|
||||
}
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.intellij.util.descriptors.impl;
|
||||
|
||||
import com.intellij.util.descriptors.ConfigFileMetaData;
|
||||
import com.intellij.util.descriptors.ConfigFileMetaDataRegistry;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ConfigFileMetaDataRegistryImpl implements ConfigFileMetaDataRegistry {
|
||||
private final List<ConfigFileMetaData> myMetaData = new ArrayList<ConfigFileMetaData>();
|
||||
private final Map<String, ConfigFileMetaData> myId2MetaData = new HashMap<String, ConfigFileMetaData>();
|
||||
private ConfigFileMetaData[] myCachedMetaData;
|
||||
|
||||
public ConfigFileMetaDataRegistryImpl() {
|
||||
}
|
||||
|
||||
public ConfigFileMetaDataRegistryImpl(ConfigFileMetaData[] metaDatas) {
|
||||
for (ConfigFileMetaData metaData : metaDatas) {
|
||||
registerMetaData(metaData);
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public ConfigFileMetaData[] getMetaData() {
|
||||
if (myCachedMetaData == null) {
|
||||
myCachedMetaData = myMetaData.toArray(new ConfigFileMetaData[myMetaData.size()]);
|
||||
}
|
||||
return myCachedMetaData;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public ConfigFileMetaData findMetaData(@NonNls @NotNull final String id) {
|
||||
return myId2MetaData.get(id);
|
||||
}
|
||||
|
||||
public void registerMetaData(@NotNull final ConfigFileMetaData... metaData) {
|
||||
for (ConfigFileMetaData data : metaData) {
|
||||
myMetaData.add(data);
|
||||
myId2MetaData.put(data.getId(), data);
|
||||
}
|
||||
myCachedMetaData = null;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,83 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2007 JetBrains s.r.o. All Rights Reserved.
|
||||
*/
|
||||
|
||||
package com.intellij.util.descriptors.impl;
|
||||
|
||||
import com.intellij.util.descriptors.CustomConfigFileSet;
|
||||
import com.intellij.util.descriptors.CustomConfigFile;
|
||||
import com.intellij.openapi.util.InvalidDataException;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class CustomConfigFileSetImpl implements CustomConfigFileSet {
|
||||
@NonNls private static final String ELEMENT_NAME = "deploymentDescriptor";
|
||||
@NonNls private static final String URL_ATTRIBUTE = "url";
|
||||
@NonNls private static final String OPTION_ELEMENT_NAME = "option";
|
||||
@NonNls private static final String DEFAULT_DIR_OPTION = "DEFAULT_DIR";
|
||||
@NonNls private static final String NAME_ATTRIBUTE = "name";
|
||||
@NonNls private static final String VALUE_ATTRIBUTE = "value";
|
||||
|
||||
private final List<CustomConfigFile> myDescriptors = new ArrayList<CustomConfigFile>();
|
||||
|
||||
public void add(CustomConfigFile descriptor) {
|
||||
myDescriptors.add(descriptor);
|
||||
}
|
||||
|
||||
public void remove(CustomConfigFile descriptor) {
|
||||
myDescriptors.remove(descriptor);
|
||||
}
|
||||
|
||||
public CustomConfigFile[] getConfigFiles() {
|
||||
return myDescriptors.toArray(new CustomConfigFile[myDescriptors.size()]);
|
||||
}
|
||||
|
||||
public void setConfigFiles(final Collection<CustomConfigFile> descriptors) {
|
||||
myDescriptors.clear();
|
||||
myDescriptors.addAll(descriptors);
|
||||
}
|
||||
|
||||
public void readExternal(Element element) throws InvalidDataException {
|
||||
myDescriptors.clear();
|
||||
List<Element> descriptors = element.getChildren(ELEMENT_NAME);
|
||||
for (Element descriptor : descriptors) {
|
||||
String url = descriptor.getAttributeValue(URL_ATTRIBUTE);
|
||||
String directory = getDefaultDirOption(descriptor);
|
||||
if (directory != null) {
|
||||
myDescriptors.add(new CustomConfigFile(url, directory));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static String getDefaultDirOption(final Element descriptor) {
|
||||
List<Element> options = descriptor.getChildren(OPTION_ELEMENT_NAME);
|
||||
for (Element option : options) {
|
||||
if (DEFAULT_DIR_OPTION.equals(option.getAttributeValue(NAME_ATTRIBUTE))) {
|
||||
return option.getAttributeValue(VALUE_ATTRIBUTE);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void writeExternal(Element element) throws WriteExternalException {
|
||||
for (CustomConfigFile descriptor : myDescriptors) {
|
||||
final Element child = new Element(ELEMENT_NAME);
|
||||
child.setAttribute(URL_ATTRIBUTE, descriptor.getUrl());
|
||||
final Element option = new Element(OPTION_ELEMENT_NAME);
|
||||
option.setAttribute(NAME_ATTRIBUTE, DEFAULT_DIR_OPTION);
|
||||
option.setAttribute(VALUE_ATTRIBUTE, descriptor.getOutputDirectoryPath());
|
||||
child.addContent(option);
|
||||
element.addContent(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user