/*
* Copyright 2016 Igor Maznitsa.
*
* 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.igormaznitsa.sciareto.ui;
import java.io.File;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import com.igormaznitsa.meta.annotation.MustNotContainNull;
import com.igormaznitsa.mindmap.model.Extra;
import com.igormaznitsa.mindmap.model.ExtraFile;
import com.igormaznitsa.mindmap.model.MMapURI;
import com.igormaznitsa.mindmap.model.MindMap;
import com.igormaznitsa.mindmap.model.Topic;
public final class MapUtils {
private MapUtils() {
}
@Nonnull
public static Pattern string2pattern(@Nonnull final String text, final int patternFlags){
final StringBuilder result = new StringBuilder();
for(final char c : text.toCharArray()){
result.append("\\u"); //NOI18N
final String code = Integer.toHexString(c).toUpperCase(Locale.ENGLISH);
result.append("0000",0,4-code.length()).append(code); //NOI18N
}
return Pattern.compile(result.toString(), patternFlags);
}
@Nonnull
@MustNotContainNull
public static List<MMapURI> extractAllFileLinks(@Nonnull final MindMap map) {
final List<MMapURI> result = new ArrayList<MMapURI>();
for(final Topic t : map){
final ExtraFile file = (ExtraFile) t.getExtras().get(Extra.ExtraType.FILE);
if (file != null){
result.add(file.getAsURI());
}
}
return result;
}
@Nonnull
@MustNotContainNull
public static List<Topic> findTopicsRelatedToFile(@Nullable final File baseFolder, @Nonnull final File file, @Nonnull final MindMap map) {
final List<Topic> result = new ArrayList<>();
final Path theFile = file.isAbsolute() ? file.toPath() : new File(baseFolder, file.getAbsolutePath()).toPath();
final boolean folder = file.isDirectory();
for (final Topic t : map) {
final ExtraFile linkToFile = (ExtraFile) t.getExtras().get(Extra.ExtraType.FILE);
if (linkToFile != null) {
final MMapURI uri = linkToFile.getAsURI();
final Path linkFile = uri.asFile(baseFolder).toPath();
if (folder) {
if (linkFile.startsWith(theFile)) {
result.add(t);
}
} else if (linkFile.equals(theFile)) {
result.add(t);
}
}
}
return result;
}
}