/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.module.deployment.impl.internal.builder;
import static com.google.common.base.Preconditions.checkArgument;
import static java.io.File.separator;
import static org.apache.commons.io.FileUtils.writeStringToFile;
import static org.mule.runtime.deployment.model.api.policy.PolicyTemplateDescriptor.DEFAULT_POLICY_CONFIGURATION_RESOURCE;
import static org.mule.runtime.deployment.model.api.policy.PolicyTemplateDescriptor.META_INF;
import static org.mule.runtime.deployment.model.api.policy.PolicyTemplateDescriptor.MULE_ARTIFACT;
import static org.mule.runtime.deployment.model.api.policy.PolicyTemplateDescriptor.MULE_POLICY_JSON;
import org.mule.runtime.api.deployment.meta.MulePolicyModel;
import org.mule.runtime.api.deployment.persistence.MulePolicyModelJsonSerializer;
import org.mule.runtime.deployment.model.api.policy.PolicyTemplateDescriptor;
import org.mule.tck.ZipUtils.ZipResource;
import java.io.File;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
/**
* Creates Mule Application Policy files.
*/
public class PolicyFileBuilder extends DeployableFileBuilder<PolicyFileBuilder> {
private MulePolicyModel mulePolicyModel;
public PolicyFileBuilder(String id) {
super(id);
}
@Override
public String getConfigFile() {
return DEFAULT_POLICY_CONFIGURATION_RESOURCE;
}
@Override
protected PolicyFileBuilder getThis() {
return this;
}
/**
* Adds a model describer to the policy describer file.
*
* @param mulePolicyModel the describer to store under
* {@link PolicyTemplateDescriptor#META_INF}/{@link PolicyTemplateDescriptor#MULE_POLICY_JSON} file
* @return the same builder instance
*/
public PolicyFileBuilder describedBy(MulePolicyModel mulePolicyModel) {
checkImmutable();
checkArgument(mulePolicyModel != null, "JSON describer cannot be null");
this.mulePolicyModel = mulePolicyModel;
return this;
}
@Override
protected List<ZipResource> doGetCustomResources() {
final List<ZipResource> customResources = new LinkedList<>();
if (mulePolicyModel != null) {
final File jsonDescriptorFile =
new File(getTempFolder(), META_INF + separator + MULE_ARTIFACT + separator + MULE_POLICY_JSON);
jsonDescriptorFile.deleteOnExit();
String jsonDescriber = new MulePolicyModelJsonSerializer().serialize(mulePolicyModel);
try {
writeStringToFile(jsonDescriptorFile, jsonDescriber);
} catch (IOException e) {
throw new IllegalStateException("There was an issue generating the JSON file for " + this.getId(), e);
}
customResources
.add(new ZipResource(jsonDescriptorFile.getAbsolutePath(), META_INF + "/" + MULE_ARTIFACT + "/" + MULE_POLICY_JSON));
}
return customResources;
}
}