Search in sources :

Example 1 with LibraryBundlificationRule

use of org.jetbrains.osgi.jps.model.LibraryBundlificationRule in project intellij-plugins by JetBrains.

the class BndWrapper method wrap.

@Nullable
private File wrap(@NotNull File sourceFile, @NotNull File outputDir, @NotNull List<LibraryBundlificationRule> rules) throws OsgiBuildException {
    if (!sourceFile.isFile()) {
        throw new OsgiBuildException("The library '" + sourceFile + "' does not exist - please check module dependencies.");
    }
    File targetFile = new File(outputDir, sourceFile.getName());
    Map<String, String> additionalProperties = ContainerUtil.newHashMap();
    long lastModified = Long.MIN_VALUE;
    for (LibraryBundlificationRule bundlificationRule : rules) {
        if (bundlificationRule.appliesTo(sourceFile.getName())) {
            if (bundlificationRule.isDoNotBundle()) {
                return null;
            }
            additionalProperties.putAll(bundlificationRule.getAdditionalPropertiesMap());
            lastModified = Math.max(lastModified, bundlificationRule.getLastModified());
            if (bundlificationRule.isStopAfterThisRule()) {
                break;
            }
        }
    }
    if (targetFile.exists() && targetFile.lastModified() >= sourceFile.lastModified() && targetFile.lastModified() >= lastModified) {
        return targetFile;
    }
    doWrap(sourceFile, targetFile, additionalProperties);
    return targetFile;
}
Also used : LibraryBundlificationRule(org.jetbrains.osgi.jps.model.LibraryBundlificationRule) JarFile(java.util.jar.JarFile) File(java.io.File) Nullable(org.jetbrains.annotations.Nullable)

Example 2 with LibraryBundlificationRule

use of org.jetbrains.osgi.jps.model.LibraryBundlificationRule in project intellij-plugins by JetBrains.

the class LibraryBundlificationRuleTest method testEqual.

@Test
public void testEqual() throws Exception {
    LibraryBundlificationRule rule1 = new LibraryBundlificationRule();
    LibraryBundlificationRule rule2 = new LibraryBundlificationRule();
    assertTrue(rule1.equals(rule2));
    rule1.setRuleRegex(".+\\.jar");
    rule2.setRuleRegex(".+\\.zip");
    assertFalse(rule1.equals(rule2));
}
Also used : LibraryBundlificationRule(org.jetbrains.osgi.jps.model.LibraryBundlificationRule) Test(org.junit.Test)

Example 3 with LibraryBundlificationRule

use of org.jetbrains.osgi.jps.model.LibraryBundlificationRule in project intellij-plugins by JetBrains.

the class BundleCompiler method bundlifyLibraries.

/**
   * Bundlifies all libraries that belong to the given module and that are not bundles.
   * The bundles are cached, so if the source library does not change, it will not be bundlified again.
   * Returns a string array containing paths of the bundlified libraries.
   */
@NotNull
public List<String> bundlifyLibraries(@NotNull Module module) throws OsgiBuildException {
    myIndicator.setText("Bundling non-OSGi libraries for module '" + module.getName() + "'");
    File outputDir = BndWrapper.getOutputDir(getModuleOutputDir(module));
    List<LibraryBundlificationRule> libRules = ApplicationSettings.getInstance().getLibraryBundlificationRules();
    List<String> paths = OrderEnumerator.orderEntries(module).withoutSdk().withoutModuleSourceEntries().withoutDepModules().productionOnly().runtimeOnly().recursively().exportedOnly().classes().getPathsList().getPathList();
    List<File> files = ContainerUtil.map(paths, path -> new File(path));
    return new BndWrapper(this).bundlifyLibraries(files, outputDir, libRules);
}
Also used : LibraryBundlificationRule(org.jetbrains.osgi.jps.model.LibraryBundlificationRule) BndWrapper(org.jetbrains.osgi.jps.build.BndWrapper) File(java.io.File) NotNull(org.jetbrains.annotations.NotNull)

Example 4 with LibraryBundlificationRule

use of org.jetbrains.osgi.jps.model.LibraryBundlificationRule in project intellij-plugins by JetBrains.

the class LibraryBundlingEditorComponent method updateFields.

private void updateFields() {
    int index = myRulesList.getSelectedIndex();
    if (index >= 0 && index != myLastSelected) {
        final LibraryBundlificationRule rule = myRulesModel.getElementAt(index);
        myLibraryRegex.setText(rule.getRuleRegex());
        UIUtil.invokeLaterIfNeeded(() -> myManifestEditor.setText(rule.getAdditionalProperties()));
        myNeverBundle.setSelected(rule.isDoNotBundle());
        myStopAfterThisRule.setSelected(rule.isStopAfterThisRule());
        myLastSelected = index;
    }
    myLibraryRegex.setEnabled(index >= 0);
    myManifestEditor.setEnabled(index >= 0);
    myNeverBundle.setEnabled(index >= 0);
    myStopAfterThisRule.setEnabled(index >= 0);
}
Also used : LibraryBundlificationRule(org.jetbrains.osgi.jps.model.LibraryBundlificationRule)

Example 5 with LibraryBundlificationRule

use of org.jetbrains.osgi.jps.model.LibraryBundlificationRule in project intellij-plugins by JetBrains.

the class LibraryBundlingEditorComponent method updateCurrentRule.

private void updateCurrentRule() {
    if (myLastSelected >= 0 && myLastSelected < myRulesModel.getSize()) {
        LibraryBundlificationRule newRule = new LibraryBundlificationRule();
        newRule.setRuleRegex(myLibraryRegex.getText().trim());
        newRule.setAdditionalProperties(myManifestEditor.getText().trim());
        newRule.setDoNotBundle(myNeverBundle.isSelected());
        newRule.setStopAfterThisRule(myStopAfterThisRule.isSelected());
        if (!newRule.equals(myRulesModel.getElementAt(myLastSelected))) {
            myRulesModel.setElementAt(newRule, myLastSelected);
        }
    }
}
Also used : LibraryBundlificationRule(org.jetbrains.osgi.jps.model.LibraryBundlificationRule)

Aggregations

LibraryBundlificationRule (org.jetbrains.osgi.jps.model.LibraryBundlificationRule)6 File (java.io.File)2 Test (org.junit.Test)2 JarFile (java.util.jar.JarFile)1 NotNull (org.jetbrains.annotations.NotNull)1 Nullable (org.jetbrains.annotations.Nullable)1 BndWrapper (org.jetbrains.osgi.jps.build.BndWrapper)1