| 1769 | /** |
| 1770 | * Class to store a menu action and the class it belongs to. |
| 1771 | */ |
| 1772 | private static class MenuAddition { |
| 1773 | public final Action addition; |
| 1774 | public final Class<? extends AbstractTileSourceLayer> clazz; |
| 1775 | |
| 1776 | MenuAddition(Action addition, Class<? extends AbstractTileSourceLayer> clazz) { |
| 1777 | this.addition = addition; |
| 1778 | this.clazz = clazz; |
| 1779 | } |
| 1780 | } |
| 1781 | |
| 1782 | /** |
| 1783 | * Register an additional layer context menu entry. |
| 1784 | * |
| 1785 | * @param addition additional menu action |
| 1786 | */ |
| 1787 | public static void registerMenuAddition(Action addition) { |
| 1788 | menuAdditions.add(new MenuAddition(addition, AbstractTileSourceLayer.class)); |
| 1789 | } |
| 1790 | |
| 1791 | /** |
| 1792 | * Register an additional layer context menu entry for a imagery layer |
| 1793 | * class. The menu entry is valid for the specified class and subclasses |
| 1794 | * thereof only. |
| 1795 | * <p> |
| 1796 | * Example: |
| 1797 | * <pre> |
| 1798 | * TMSLayer.registerMenuAddition(new TMSSpecificAction(), TMSLayer.class); |
| 1799 | * </pre> |
| 1800 | * |
| 1801 | * @param addition additional menu action |
| 1802 | * @param clazz class the menu action is registered for |
| 1803 | */ |
| 1804 | public static void registerMenuAddition(Action addition, |
| 1805 | Class<? extends AbstractTileSourceLayer> clazz) { |
| 1806 | menuAdditions.add(new MenuAddition(addition, clazz)); |
| 1807 | } |
| 1808 | |
| 1809 | /** |
| 1810 | * Prepare list of additional layer context menu entries. The list is |
| 1811 | * empty if there are no additional menu entries. |
| 1812 | * |
| 1813 | * @return list of additional layer context menu entries |
| 1814 | */ |
| 1815 | private List<Action> getMenuAdditions() { |
| 1816 | final LinkedList<Action> menuAdds = new LinkedList<>(); |
| 1817 | for (MenuAddition menuAdd: menuAdditions) { |
| 1818 | if (menuAdd.clazz.isInstance(this)) { |
| 1819 | menuAdds.add(menuAdd.addition); |
| 1820 | } |
| 1821 | } |
| 1822 | if (!menuAdds.isEmpty()) { |
| 1823 | menuAdds.addFirst(SeparatorLayerAction.INSTANCE); |
| 1824 | } |
| 1825 | return menuAdds; |
| 1826 | } |
| 1827 | |