package com.intellij.flex.model.bc.impl;
import com.intellij.flex.model.bc.JpsAirPackageEntry;
import com.intellij.flex.model.bc.JpsAndroidPackagingOptions;
import com.intellij.util.xmlb.annotations.AbstractCollection;
import com.intellij.util.xmlb.annotations.Attribute;
import com.intellij.util.xmlb.annotations.Property;
import com.intellij.util.xmlb.annotations.Tag;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.model.JpsElementCollection;
import org.jetbrains.jps.model.JpsElementCreator;
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
import java.util.ArrayList;
import java.util.List;
class JpsAndroidPackagingOptionsImpl extends JpsAirPackagingOptionsBase<JpsAndroidPackagingOptionsImpl>
implements JpsAndroidPackagingOptions {
static final JpsAndroidPackagingOptionsRole ROLE = new JpsAndroidPackagingOptionsRole();
private JpsAndroidPackagingOptionsImpl() {
}
private JpsAndroidPackagingOptionsImpl(final JpsAirPackagingOptionsBase<JpsAndroidPackagingOptionsImpl> original) {
super(original);
}
@NotNull
public JpsAndroidPackagingOptionsImpl createCopy() {
return new JpsAndroidPackagingOptionsImpl(this);
}
State getState() {
final State state = new State();
state.ENABLED = isEnabled();
state.USE_GENERATED_DESCRIPTOR = isUseGeneratedDescriptor();
state.CUSTOM_DESCRIPTOR_PATH = getCustomDescriptorPath();
state.PACKAGE_FILE_NAME = getPackageFileName();
for (JpsAirPackageEntry entry : getFilesToPackage()) {
state.FILES_TO_PACKAGE.add(((JpsAirPackageEntryImpl)entry).getState());
}
state.SIGNING_OPTIONS = ((JpsAirSigningOptionsImpl)getSigningOptions()).getState();
return state;
}
void loadState(@NotNull State state) {
setEnabled(state.ENABLED);
setUseGeneratedDescriptor(state.USE_GENERATED_DESCRIPTOR);
setCustomDescriptorPath(state.CUSTOM_DESCRIPTOR_PATH);
setPackageFileName(state.PACKAGE_FILE_NAME);
final JpsElementCollection<JpsAirPackageEntry> packageEntries = myContainer.getChild(JpsAirPackageEntryImpl.COLLECTION_ROLE);
assert packageEntries.getElements().isEmpty();
for (JpsAirPackageEntryImpl.State f : state.FILES_TO_PACKAGE) {
final JpsAirPackageEntry entry = ((JpsElementCreator<JpsAirPackageEntry>)JpsAirPackageEntryImpl.ROLE).create();
((JpsAirPackageEntryImpl)entry).loadState(f);
packageEntries.addChild(entry);
}
((JpsAirSigningOptionsImpl)getSigningOptions()).loadState(state.SIGNING_OPTIONS);
}
private static class JpsAndroidPackagingOptionsRole extends JpsElementChildRoleBase<JpsAndroidPackagingOptions>
implements JpsElementCreator<JpsAndroidPackagingOptions> {
public JpsAndroidPackagingOptionsRole() {
super("android packaging options");
}
@NotNull
public JpsAndroidPackagingOptions create() {
return new JpsAndroidPackagingOptionsImpl();
}
}
@Tag("packaging-android")
public static class State {
@Attribute("enabled")
public boolean ENABLED = false;
@Attribute("use-generated-descriptor")
public boolean USE_GENERATED_DESCRIPTOR = true;
@Attribute("custom-descriptor-path")
public String CUSTOM_DESCRIPTOR_PATH = "";
@Attribute("package-file-name")
public String PACKAGE_FILE_NAME = "";
@Tag("files-to-package")
@AbstractCollection(surroundWithTag = false)
public List<JpsAirPackageEntryImpl.State> FILES_TO_PACKAGE = new ArrayList<>();
@Property(surroundWithTag = false)
public JpsAirSigningOptionsImpl.State SIGNING_OPTIONS = new JpsAirSigningOptionsImpl.State();
}
}