Skip to content

Commit 5789831

Browse files
committed
release 1.5.2
1 parent 7aaf190 commit 5789831

File tree

19 files changed

+2402
-147
lines changed

19 files changed

+2402
-147
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Initially I developed plugin for NetBeans IDE but because in companies, where I
1515

1616
# Changelog
1717

18-
__1.5.2 (SNAPSHOT)__
18+
__1.5.2 (11-sep-2022)__
1919
- SR: added way to set PlantUML security profile through preferences
2020
- SR: added FlatLaf themes [#104](https://github.com/raydac/netbeans-mmd-plugin/issues/104)
2121
- SR: updated PlantUML to 1.2022.7

changelog.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
__1.5.2 (SNAPSHOT)__
1+
__1.5.2 (11-sep-2022)__
22

33
- SR: added way to set PlantUML security profile through preferences
44
- SR: added FlatLaf themes [#104](https://github.com/raydac/netbeans-mmd-plugin/issues/104)

mind-map/idea-mindmap/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ repositories {
99
mavenLocal()
1010
}
1111

12-
version = project.hasProperty('mm_plugin_version') ? project.getProperty('mm_plugin_version') : "1.5.2-SNAPSHOT"
12+
version = project.hasProperty('mm_plugin_version') ? project.getProperty('mm_plugin_version') : "1.5.2"
1313

1414
intellij {
1515
version 'IC-181.5684.4'
@@ -18,13 +18,13 @@ intellij {
1818
updateSinceUntilBuild false
1919
}
2020

21-
def mindMapModelVersion = project.hasProperty('mm_model_version') ? project.getProperty('mm_model_version') : "1.5.2-SNAPSHOT"
21+
def mindMapModelVersion = project.hasProperty('mm_model_version') ? project.getProperty('mm_model_version') : "1.5.2"
2222
def mindMapCommonVersion = project.hasProperty('mm_ide_common_version') ? project.getProperty('mm_ide_common_version') : project.version
2323
def mindMapPanelVersion = project.hasProperty('mm_panel_version') ? project.getProperty('mm_panel_version') : project.version
2424
def commonsIoVersion = project.hasProperty('commonsio_version') ? project.getProperty('commonsio_version') : "2.11.0"
2525
def commonsLangVersion = project.hasProperty('commonslang_version') ? project.getProperty('commonslang_version') : "3.12.0"
2626
def iharderVersion = project.hasProperty('iharder_version') ? project.getProperty('iharder_version') : "2.3.9"
27-
def jsoupVersion = project.hasProperty('jsoup_version') ? project.getProperty('jsoup_version') : "1.11.3"
27+
def jsoupVersion = project.hasProperty('jsoup_version') ? project.getProperty('jsoup_version') : "1.15.3"
2828
def jsonVersion = project.hasProperty('json_version') ? project.getProperty('json_version') : "20180813"
2929

3030
sourceCompatibility = 1.8

mind-map/idea-mindmap/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.igormaznitsa</groupId>
77
<artifactId>mind-map</artifactId>
8-
<version>1.5.2-SNAPSHOT</version>
8+
<version>1.5.2</version>
99
</parent>
1010

1111
<artifactId>idea-mindmap</artifactId>

mind-map/idea-mindmap/resources/META-INF/plugin.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,11 @@
1212
]]></description>
1313

1414
<change-notes><![CDATA[
15+
<p>1.5.2 (11-sep-2022)</p>
16+
<ul>
17+
<li>fixed use of Insert key as shortcut</li>
18+
<li>minor refactoring</li>
19+
</ul>
1520
<p>1.5.1 (15-apr-2022)</p>
1621
<ul>
1722
<li>fixed wrong decimal separator in SVG exporter</li>

mind-map/mind-map-ide-common/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.igormaznitsa</groupId>
66
<artifactId>mind-map</artifactId>
7-
<version>1.5.2-SNAPSHOT</version>
7+
<version>1.5.2</version>
88
</parent>
99

1010
<artifactId>mind-map-ide-common</artifactId>

mind-map/mind-map-model/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<groupId>com.igormaznitsa</groupId>
77
<artifactId>mind-map</artifactId>
8-
<version>1.5.2-SNAPSHOT</version>
8+
<version>1.5.2</version>
99
</parent>
1010

1111
<artifactId>mind-map-model</artifactId>

mind-map/mind-map-swing-panel/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>com.igormaznitsa</groupId>
66
<artifactId>mind-map</artifactId>
7-
<version>1.5.2-SNAPSHOT</version>
7+
<version>1.5.2</version>
88
</parent>
99

1010
<artifactId>mind-map-swing-panel</artifactId>

mind-map/mind-map-swing-panel/src/main/java/com/igormaznitsa/mindmap/plugins/importers/Freemind2MindMapImporter.java

Lines changed: 60 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import static com.igormaznitsa.mindmap.swing.panel.StandardTopicAttribute.ATTR_FILL_COLOR;
2020
import static com.igormaznitsa.mindmap.swing.panel.StandardTopicAttribute.ATTR_TEXT_COLOR;
2121

22-
2322
import com.igormaznitsa.meta.annotation.MustNotContainNull;
2423
import com.igormaznitsa.meta.annotation.ReturnsOriginal;
2524
import com.igormaznitsa.meta.common.utils.Assertions;
@@ -42,6 +41,7 @@
4241
import java.awt.Color;
4342
import java.io.File;
4443
import java.io.FileInputStream;
44+
import java.io.IOException;
4545
import java.net.URI;
4646
import java.net.URISyntaxException;
4747
import java.util.ArrayList;
@@ -54,9 +54,12 @@
5454
import javax.annotation.Nonnull;
5555
import javax.annotation.Nullable;
5656
import javax.swing.Icon;
57+
import javax.xml.parsers.ParserConfigurationException;
5758
import javax.xml.xpath.XPath;
5859
import javax.xml.xpath.XPathConstants;
60+
import javax.xml.xpath.XPathExpressionException;
5961
import javax.xml.xpath.XPathFactory;
62+
import org.jsoup.parser.Parser;
6063
import org.w3c.dom.Attr;
6164
import org.w3c.dom.Document;
6265
import org.w3c.dom.Element;
@@ -66,19 +69,24 @@
6669

6770
public class Freemind2MindMapImporter extends AbstractImporter {
6871

69-
private static final Icon ICO = ImageIconServiceProvider.findInstance().getIconForId(IconID.POPUP_EXPORT_FREEMIND);
72+
private static final Icon ICO =
73+
ImageIconServiceProvider.findInstance().getIconForId(IconID.POPUP_EXPORT_FREEMIND);
7074

7175
private static final Logger LOGGER = LoggerFactory.getLogger(Freemind2MindMapImporter.class);
7276

73-
private static final Set<String> TOKEN_NEEDS_NEXT_LINE = new HashSet<>(Arrays.asList("br", "div", "p", "li"));
77+
private static final Set<String> TOKEN_NEEDS_NEXT_LINE =
78+
new HashSet<>(Arrays.asList("br", "div", "p", "li"));
7479

7580
@Nonnull
7681
private static String findArrowlinkDestination(@Nonnull final Element element) {
7782
final List<Element> arrows = Utils.findDirectChildrenForName(element, "arrowlink");
7883
return arrows.isEmpty() ? "" : findAttribute(arrows.get(0), "destination");
7984
}
8085

81-
private static void processImageLinkForTopic(@Nonnull final File rootFolder, @Nonnull final Topic topic, @Nonnull @MustNotContainNull final String[] imageUrls) {
86+
private static void processImageLinkForTopic(@Nonnull final File rootFolder,
87+
@Nonnull final Topic topic,
88+
@Nonnull @MustNotContainNull
89+
final String[] imageUrls) {
8290
for (final String s : imageUrls) {
8391
try {
8492
URI imageUri = URI.create(s);
@@ -91,7 +99,8 @@ private static void processImageLinkForTopic(@Nonnull final File rootFolder, @No
9199
}
92100

93101
if (file.isFile()) {
94-
topic.setAttribute(ImageVisualAttributePlugin.ATTR_KEY, Utils.rescaleImageAndEncodeAsBase64(file, -1));
102+
topic.setAttribute(ImageVisualAttributePlugin.ATTR_KEY,
103+
Utils.rescaleImageAndEncodeAsBase64(file, -1));
95104
break;
96105
}
97106
} catch (Exception ex) {
@@ -102,7 +111,10 @@ private static void processImageLinkForTopic(@Nonnull final File rootFolder, @No
102111

103112
@Nonnull
104113
@ReturnsOriginal
105-
private static StringBuilder processHtmlElement(@Nonnull final NodeList list, @Nonnull final StringBuilder builder, @Nonnull @MustNotContainNull final List<String> imageURLs) {
114+
private static StringBuilder processHtmlElement(@Nonnull final NodeList list,
115+
@Nonnull final StringBuilder builder,
116+
@Nonnull @MustNotContainNull
117+
final List<String> imageURLs) {
106118
for (int i = 0; i < list.getLength(); i++) {
107119
final Node n = list.item(i);
108120
switch (n.getNodeType()) {
@@ -136,15 +148,19 @@ private static StringBuilder processHtmlElement(@Nonnull final NodeList list, @N
136148

137149
@Nonnull
138150
@ReturnsOriginal
139-
private static StringBuilder extractTextFromHtmlElement(@Nonnull final Element element, @Nonnull final StringBuilder buffer, @Nonnull @MustNotContainNull final List<String> imageURLs) {
151+
private static StringBuilder extractTextFromHtmlElement(@Nonnull final Element element,
152+
@Nonnull final StringBuilder buffer,
153+
@Nonnull @MustNotContainNull
154+
final List<String> imageURLs) {
140155
processHtmlElement(element.getChildNodes(), buffer, imageURLs);
141156
return buffer;
142157
}
143158

144159
@Nonnull
145160
@MustNotContainNull
146161
private static List<RichContent> extractRichContent(@Nonnull final Element richContentElement) {
147-
final List<Element> richContents = Utils.findDirectChildrenForName(richContentElement, "richcontent");
162+
final List<Element> richContents =
163+
Utils.findDirectChildrenForName(richContentElement, "richcontent");
148164

149165
final List<RichContent> result = new ArrayList<>();
150166

@@ -155,7 +171,9 @@ private static List<RichContent> extractRichContent(@Nonnull final Element richC
155171
try {
156172
foundImageUrls.clear();
157173
final RichContentType type = RichContentType.valueOf(textType);
158-
final String text = extractTextFromHtmlElement(e, new StringBuilder(), foundImageUrls).toString().replace("\r", "");
174+
final String text =
175+
extractTextFromHtmlElement(e, new StringBuilder(), foundImageUrls).toString()
176+
.replace("\r", "");
159177
result.add(new RichContent(type, text, foundImageUrls));
160178
} catch (IllegalArgumentException ex) {
161179
LOGGER.warn("Unknown node type : " + textType);
@@ -166,7 +184,8 @@ private static List<RichContent> extractRichContent(@Nonnull final Element richC
166184
}
167185

168186
@Nonnull
169-
private static String findAttribute(@Nonnull final Element element, @Nonnull final String attribute) {
187+
private static String findAttribute(@Nonnull final Element element,
188+
@Nonnull final String attribute) {
170189
final NamedNodeMap map = element.getAttributes();
171190
for (int i = 0; i < map.getLength(); i++) {
172191
final Attr attr = (Attr) map.item(i);
@@ -180,15 +199,29 @@ private static String findAttribute(@Nonnull final Element element, @Nonnull fin
180199
@Override
181200
@Nullable
182201
public MindMap doImport(@Nonnull final PluginContext context) throws Exception {
183-
final File file = this.selectFileForExtension(context, Texts.getString("MMDImporters.Freemind2MindMap.openDialogTitle"), null, "mm", "Freemind files (.MM)", Texts.getString("MMDImporters.ApproveImport"));
202+
final File file = this.selectFileForExtension(context,
203+
Texts.getString("MMDImporters.Freemind2MindMap.openDialogTitle"), null, "mm",
204+
"Freemind files (.MM)", Texts.getString("MMDImporters.ApproveImport"));
184205

185206
if (file == null) {
186207
return null;
187208
}
188209

189-
final Document document = Utils.loadHtmlDocument(new FileInputStream(file), "UTF-8", true);
210+
try (final FileInputStream in = new FileInputStream(file)) {
211+
final File rootFolder = file.getParentFile();
212+
return extractTopics(rootFolder == null ? file : rootFolder, in);
213+
}
214+
}
215+
216+
@Nonnull
217+
public MindMap extractTopics(@Nonnull final File rootFolder,
218+
@Nonnull final FileInputStream inputStream)
219+
throws ParserConfigurationException, IOException, XPathExpressionException {
220+
final Document document = Utils.load(inputStream, "UTF-8", Parser.xmlParser(), true);
221+
190222
final XPath xpath = XPathFactory.newInstance().newXPath();
191-
final Element rootElement = (Element) xpath.evaluate("/html/body/map", document, XPathConstants.NODE);
223+
final Element rootElement =
224+
(Element) xpath.evaluate("/map", document, XPathConstants.NODE);
192225

193226
if (rootElement == null) {
194227
throw new IllegalArgumentException("Can't parse freemind file as xhtml");
@@ -203,7 +236,8 @@ public MindMap doImport(@Nonnull final PluginContext context) throws Exception {
203236
if (list.isEmpty()) {
204237
Assertions.assertNotNull(resultedMap.getRoot()).setText("Empty");
205238
} else {
206-
parseTopic(file.getParentFile(), resultedMap, null, resultedMap.getRoot(), list.get(0), idTopicMap, linksMap);
239+
parseTopic(rootFolder, resultedMap, null, resultedMap.getRoot(), list.get(0), idTopicMap,
240+
linksMap);
207241
}
208242

209243
for (final Map.Entry<String, String> l : linksMap.entrySet()) {
@@ -217,7 +251,10 @@ public MindMap doImport(@Nonnull final PluginContext context) throws Exception {
217251
return resultedMap;
218252
}
219253

220-
private void parseTopic(@Nonnull final File rootFolder, @Nonnull final MindMap map, @Nullable Topic parent, @Nullable Topic preGeneratedTopic, @Nonnull Element element, @Nonnull final Map<String, Topic> idTopicMap, @Nonnull final Map<String, String> linksMap) {
254+
private void parseTopic(@Nonnull final File rootFolder, @Nonnull final MindMap map,
255+
@Nullable Topic parent, @Nullable Topic preGeneratedTopic,
256+
@Nonnull Element element, @Nonnull final Map<String, Topic> idTopicMap,
257+
@Nonnull final Map<String, String> linksMap) {
221258

222259
final String text = findAttribute(element, "text");
223260
final String id = findAttribute(element, "id");
@@ -246,14 +283,17 @@ private void parseTopic(@Nonnull final File rootFolder, @Nonnull final MindMap m
246283
final Color backgroundColorConverted = Utils.html2color(backgroundColor, false);
247284

248285
if (colorConverted != null) {
249-
topicToProcess.setAttribute(ATTR_TEXT_COLOR.getText(), Utils.color2html(colorConverted, false));
286+
topicToProcess.setAttribute(ATTR_TEXT_COLOR.getText(),
287+
Utils.color2html(colorConverted, false));
250288
}
251289

252290
if (backgroundColorConverted != null) {
253-
topicToProcess.setAttribute(ATTR_FILL_COLOR.getText(), Utils.color2html(backgroundColorConverted, false));
291+
topicToProcess.setAttribute(ATTR_FILL_COLOR.getText(),
292+
Utils.color2html(backgroundColorConverted, false));
254293
} else {
255294
if (colorConverted != null) {
256-
topicToProcess.setAttribute(ATTR_FILL_COLOR.getText(), Utils.color2html(Utils.makeContrastColor(colorConverted), false));
295+
topicToProcess.setAttribute(ATTR_FILL_COLOR.getText(),
296+
Utils.color2html(Utils.makeContrastColor(colorConverted), false));
257297
}
258298
}
259299
}
@@ -348,7 +388,8 @@ private static final class RichContent {
348388
private final String text;
349389
private final String[] imageUrls;
350390

351-
private RichContent(@Nonnull final RichContentType type, @Nonnull final String text, @Nonnull @MustNotContainNull final List<String> foundImageUrls) {
391+
private RichContent(@Nonnull final RichContentType type, @Nonnull final String text,
392+
@Nonnull @MustNotContainNull final List<String> foundImageUrls) {
352393
this.type = type;
353394
this.text = text;
354395
this.imageUrls = foundImageUrls.toArray(new String[0]);

0 commit comments

Comments
 (0)