@Override
  public void performPaste(@NotNull DataContext dataContext) {
    TemplateGroup group = myConfigurable.getSingleSelectedGroup();
    assert group != null;

    String buffer = CopyPasteManager.getInstance().getContents(DataFlavor.stringFlavor);
    assert buffer != null;

    try {
      for (Element templateElement :
          JDOMUtil.load(new StringReader("<root>" + buffer + "</root>"))
              .getChildren(TemplateSettings.TEMPLATE)) {
        TemplateImpl template =
            TemplateSettings.readTemplateFromElement(
                group.getName(), templateElement, getClass().getClassLoader());
        while (group.containsTemplate(template.getKey(), template.getId())) {
          template.setKey(template.getKey() + "1");
          if (template.getId() != null) {
            template.setId(template.getId() + "1");
          }
        }
        myConfigurable.addTemplate(template);
      }
    } catch (JDOMException ignore) {
    } catch (IOException ignore) {
    }
  }
  @Override
  public boolean isPastePossible(@NotNull DataContext dataContext) {
    if (myConfigurable.getSingleSelectedGroup() == null) return false;

    String s = CopyPasteManager.getInstance().getContents(DataFlavor.stringFlavor);
    return s != null && s.startsWith("<template ");
  }
  @Override
  public void performCopy(@NotNull DataContext dataContext) {
    final Set<TemplateImpl> templates = myConfigurable.getSelectedTemplates().keySet();

    CopyPasteManager.getInstance()
        .setContents(
            new StringSelection(
                StringUtil.join(
                    templates,
                    new Function<TemplateImpl, String>() {
                      @Override
                      public String fun(TemplateImpl template) {
                        TemplateContext zeroContext = new TemplateContext();
                        for (TemplateContextType type :
                            TemplateContextType.EP_NAME.getExtensions()) {
                          zeroContext.setEnabled(type, false);
                        }
                        return JDOMUtil.writeElement(
                            TemplateSettings.serializeTemplate(template, zeroContext));
                      }
                    },
                    SystemProperties.getLineSeparator())));
  }
 @Override
 public boolean isCopyEnabled(@NotNull DataContext dataContext) {
   return !myConfigurable.getSelectedTemplates().isEmpty();
 }