/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.eclipse.errorlibrary.properties.providers; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import org.apache.commons.io.IOUtils; import org.ebayopensource.turmeric.eclipse.errorlibrary.properties.Activator; import org.ebayopensource.turmeric.eclipse.errorlibrary.properties.model.PropertiesSOAErrorDomain; import org.ebayopensource.turmeric.eclipse.errorlibrary.properties.registry.TurmericErrorRegistry; import org.ebayopensource.turmeric.eclipse.errorlibrary.properties.utils.TurmericErrorLibraryUtils; import org.ebayopensource.turmeric.eclipse.errorlibrary.providers.IErrorDomainCreator; import org.ebayopensource.turmeric.eclipse.errorlibrary.ui.model.DomainParamModel; import org.ebayopensource.turmeric.eclipse.exception.resources.SOAErrorDomainCreationFailedException; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem; import org.ebayopensource.turmeric.eclipse.resources.model.IAssetInfo; import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil; import org.ebayopensource.turmeric.eclipse.utils.xml.FreeMarkerUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.FileLocator; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; /** * The Class PropertiesContentErrorDomainCreator. * * @author haozhou */ public class PropertiesContentErrorDomainCreator implements IErrorDomainCreator { /** * {@inheritDoc} */ @Override public void preCreation(DomainParamModel model) throws SOAErrorDomainCreationFailedException { } /** * {@inheritDoc} */ @Override public void postCreation(DomainParamModel model, IProgressMonitor monitor) throws SOAErrorDomainCreationFailedException { Map<String, String> params = new ConcurrentHashMap<String, String>(); String errorLibraryName = model.getErrorLibrary(); String domainName = model.getDomain(); params.put("packageName", model.getPackageName()); params.put("domain", domainName); params.put("org", model.getOrganization()); params.put("library", errorLibraryName); IProject libraryProject = WorkspaceUtil.getProject(errorLibraryName); try { IAssetInfo assetInfo = GlobalRepositorySystem.instanceOf().getActiveRepositorySystem().getAssetRegistry().getAsset(libraryProject); if (assetInfo != null) { params.put("version", assetInfo.getVersion()); } else { params.put("version", ""); } } catch (Exception e1) { throw new SOAErrorDomainCreationFailedException(e1); } IPath path = libraryProject.getFile(PropertiesSOAConstants.FOLDER_ERROR_DOMAIN).getLocation(); IPath targetFolder = path.append("/").append(domainName); final URL url = FileLocator.find(Activator.getDefault().getBundle(), new Path(PropertiesSOAConstants.PATH_TEMPLATE), null); FileOutputStream output = null; try { File targetFolderFile = targetFolder.toFile(); if (!targetFolderFile.exists()) { targetFolderFile.mkdir(); } File target = targetFolder.append("/").append(PropertiesSOAConstants.FILE_ERROR_DATA).toFile(); target.createNewFile(); output = new FileOutputStream(target); FreeMarkerUtil.generate(params, url, PropertiesSOAConstants.FILE_TEMPLATE, output); //update property file TurmericErrorLibraryUtils.addDomainListProps(libraryProject, domainName, monitor); //add to error registry view PropertiesSOAErrorDomain domain = new PropertiesSOAErrorDomain(); domain.setLibrary(TurmericErrorRegistry.getErrorLibraryByName(errorLibraryName)); domain.setName(domainName); domain.setOrganization(model.getOrganization()); domain.setPackageName(model.getPackageName()); TurmericErrorRegistry.addErrorDomain(errorLibraryName, domain); //create empty error property createPropsFile(libraryProject, monitor, model); } catch (Exception e) { SOAErrorDomainCreationFailedException exp = new SOAErrorDomainCreationFailedException(e); throw exp; } finally { IOUtils.closeQuietly(output); } } private void createPropsFile(IProject project, IProgressMonitor monitor, DomainParamModel model) throws CoreException, IOException { IFile file = TurmericErrorLibraryUtils.getErrorPropsFile(project, model.getDomain(), model.getLocale()); OutputStream output = null; WorkspaceUtil.refresh(file.getParent(), monitor); try { WorkspaceUtil.writeToFile("", file, monitor); } finally { IOUtils.closeQuietly(output); } } }