/**
*
* Copyright (c) 2006-2017, Speedment, Inc. All Rights Reserved.
*
* 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.speedment.tool.core.resource;
import com.speedment.common.logger.Logger;
import com.speedment.common.logger.LoggerManager;
import com.speedment.runtime.config.*;
import com.speedment.runtime.config.trait.HasMainInterface;
import com.speedment.tool.config.trait.HasIconPath;
import java.io.InputStream;
import java.util.Map;
import static java.util.Objects.requireNonNull;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import javafx.scene.Node;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
/**
* An enumeration of all the icons available in the Speedment Icon Package.
*
* @author Emil Forslund
* @since 2.2.0
*/
public enum SpeedmentIcon implements Icon {
// Big buttons
BIG_GENERATE("/images/icon-generate.png"),
BIG_CONFIGURE("/images/icon-configure.png"),
BIG_GENERATE_HOVER("/images/icon-generate-hover.png"),
BIG_CONFIGURE_HOVER("/images/icon-configure-hover.png"),
// Toolbar
NEW_PROJECT("/pics/vectors_rendered/newProject.png"),
NEW_PROJECT_24("/pics/vectors_rendered/newProject24.png"),
OPEN_PROJECT("/pics/vectors_rendered/openProject.png"),
OPEN_PROJECT_24("/pics/vectors_rendered/openProject24.png"),
RUN_PROJECT("/pics/vectors_rendered/runProject.png"),
RUN_PROJECT_24("/pics/vectors_rendered/runProject24.png"),
// Metadata Tree
COLUMN("/pics/vectors_rendered/column.png"),
DBMS("/pics/vectors_rendered/buildingKey.png"),
FOREIGN_KEY("/pics/vectors_rendered/foreignKey.png"),
FOREIGN_KEY_COLUMN("/pics/vectors_rendered/foreignKeyColumn.png"),
INDEX("/pics/vectors_rendered/index.png"),
INDEX_COLUMN("/pics/vectors_rendered/indexColumn.png"),
PRIMARY_KEY("/pics/vectors_rendered/tableKey.png"),
PRIMARY_KEY_COLUMN("/pics/vectors_rendered/primaryKeyColumn.png"),
PROJECT("/pics/vectors_rendered/project.png"),
SCHEMA("/pics/vectors_rendered/schema.png"),
TABLE("/pics/vectors_rendered/table.png"),
PLUGIN_DATA("/pics/vectors_rendered/plugin.png"),
// Menu icons
ADD_DBMS_TRANS("/pics/dialog/add_dbms_trans.png"),
OPEN_FILE("/pics/dialog/openFile.png"),
//QUESTION("/pics/dialog/question.png"), // Doesn't exist
SPEEDMENT_LOGO("/pics/dialog/speedment_logo.png"),
SPEEDMENT_LOGO_100("/pics/dialog/speedment_logo100.png"),
WALKING_MAN("/pics/dialog/walking_man.gif"),
WALKING_MAN_SMALL("/pics/dialog/walking_man_small.png"),
// Logotype
SPIRE("/images/logo.png"),
//Components controller
SITEMAP_COLOR("/pics/vectors_rendered/sitemapColor.png"),
BOX("/pics/vectors_rendered/box.png"),
BRICKS("/pics/vectors_rendered/bricks.png"),
BOOK("/pics/vectors_rendered/book.png"),
BOOK_OPEN("/pics/vectors_rendered/bookOpen.png"),
BOOK_NEXT("/pics/vectors_rendered/bookNext.png"),
DATABASE_CONNECT("/pics/vectors_rendered/databaseConnect.png"),
DATABASE("/pics/vectors_rendered/database.png"),
PAGE_WHITE_CUP("/pics/vectors_rendered/pageWhiteCup.png"),
CUP("/pics/vectors_rendered/cup.png"),
TEXT_SIGNATURE("/pics/vectors_rendered/textSignature.png"),
BOOK_LINK("/pics/vectors_rendered/bookLink.png"),
//MenuController
DISK("/pics/vectors_rendered/disk.png"),
DISK_MULTIPLE("/pics/vectors_rendered/diskMultiple.png"),
DOOR_IN("/pics/vectors_rendered/doorIn.png"),
APPLICATION_SIDE_TREE("/pics/vectors_rendered/applicationSideTree.png"),
APPLICATION_FORM("/pics/vectors_rendered/applicationForm.png"),
APPLICATION_XP_TERMINAL("/pics/vectors_rendered/applicationXpTerminal.png"),
USER_COMMENT("/pics/vectors_rendered/userComment.png"),
INFORMATION("/pics/vectors_rendered/info.png"),
HELP("/pics/vectors_rendered/help.png"),
SCRIPT_ADD("/pics/vectors_rendered/scriptAdd.png"),
SCRIPT_DELETE("/pics/vectors_rendered/scriptDelete.png"),
DATABASE_MONO("/pics/vectors_rendered/mono-database.png"),
DISK_MONO("/pics/vectors_rendered/mono-disk2.png"),
EXCLAMATION_MONO("/pics/vectors_rendered/mono-exclamation.png"),
REFRESH_MONO("/pics/vectors_rendered/mono-fa-refresh.png"),
FOLDER_OPEN_MONO("/pics/vectors_rendered/mono-folder-open.png"),
LOCK_MONO("/pics/vectors_rendered/mono-lock.png"),
PLAY_CIRCLE_MONO("/pics/vectors_rendered/mono-play-circle.png"),
SIGN_IN_MONO("/pics/vectors_rendered/mono-sign-in.png"),
SPINNER_MONO("/pics/vectors_rendered/mono-spinner.png"),
TIMES_MONO("/pics/vectors_rendered/mono-times.png");
private final String filename;
private static final Logger LOGGER = LoggerManager.getLogger(SpeedmentIcon.class);
private static final Map<Class<?>, SpeedmentIcon> NODE_ICONS = new ConcurrentHashMap<>();
static {
NODE_ICONS.put(Dbms.class, DBMS);
NODE_ICONS.put(Schema.class, SCHEMA);
NODE_ICONS.put(Table.class, TABLE);
NODE_ICONS.put(Column.class, COLUMN);
NODE_ICONS.put(Index.class, INDEX);
NODE_ICONS.put(IndexColumn.class, INDEX_COLUMN);
NODE_ICONS.put(ForeignKey.class, FOREIGN_KEY);
NODE_ICONS.put(ForeignKeyColumn.class, FOREIGN_KEY_COLUMN);
NODE_ICONS.put(PrimaryKeyColumn.class, PRIMARY_KEY_COLUMN);
NODE_ICONS.put(Project.class, PROJECT);
}
public Image load() {
return new Image(getFileInputStream());
}
public Image load(Document node) {
return new Image(getFileInputStream(node));
}
@Override
public ImageView view() {
return new ImageView(load());
}
public ImageView view(Document node) {
return new ImageView(load(node));
}
public static ImageView forNode(Document node) {
requireNonNull(node);
final Optional<String> path = Optional.of(node)
.filter(HasIconPath.class::isInstance)
.map(HasIconPath.class::cast)
.map(HasIconPath::getIconPath);
if (path.isPresent()) {
final InputStream stream = SpeedmentIcon.class.getResourceAsStream(path.get());
if (stream != null) {
return new ImageView(new Image(stream));
} else {
LOGGER.error(
"Config node '" + node.getClass().getSimpleName()
+ "' specified a custom icon '" + path.get() + "' that could not be loaded."
);
}
}
final SpeedmentIcon icon = NODE_ICONS.get(
Optional.of(node)
.filter(HasMainInterface.class::isInstance)
.map(HasMainInterface.class::cast)
.map(HasMainInterface::mainInterface)
.orElse(node.getClass())
);
if (icon != null) {
return icon.view();
} else {
LOGGER.error("Found no predefined icon for node type '" + node.getClass().getSimpleName() + "'.");
return SpeedmentIcon.HELP.view();
}
}
SpeedmentIcon(String filename) {
this.filename = requireNonNull(filename);
}
private InputStream getFileInputStream() {
return getFileInputStream(null);
}
private InputStream getFileInputStream(Document node) {
final InputStream stream = getClass().getResourceAsStream(filename);
if (stream == null) {
throw new RuntimeException("Could not find icon: '" + filename + "'.");
}
return stream;
}
public String getFilename() {
return filename;
}
}