Commit f4ef52eb authored by Kai-Holger Brassel's avatar Kai-Holger Brassel
Browse files

Added two projects to get an Eclipse application

parent 3ad3ff6c
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>de.hftstuttgart.buildingphysics.application</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.ManifestBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.pde.SchemaBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.PluginNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
<?xml version="1.0" encoding="UTF-8"?>
<application:Application xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:application="http://www.eclipse.org/ui/2010/UIModel/application" xmlns:basic="http://www.eclipse.org/ui/2010/UIModel/application/ui/basic" xmlns:menu="http://www.eclipse.org/ui/2010/UIModel/application/ui/menu" xmi:id="_6wlLcMgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.application" bindingContexts="_6wlLecgZEeSyMNYR5xypkQ">
<children xsi:type="basic:TrimmedWindow" xmi:id="_6wlLccgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.window.main" label="HfT Stuttgart - Building Physics Catalog" width="800" height="600">
<mainMenu xmi:id="_6wlLicgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.main.menu">
<children xsi:type="menu:Menu" xmi:id="_6wlLisgZEeSyMNYR5xypkQ" elementId="file" label="File">
<children xsi:type="menu:HandledMenuItem" xmi:id="_y6FesCWUEeux0PTSTJn6xg" elementId="de.hftstuttgart.buildingphysics.application.handleditem.file.new" label="New..." command="_PnX_ACWUEeux0PTSTJn6xg"/>
<children xsi:type="menu:HandledMenuItem" xmi:id="_6wlLi8gZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handleditem.file.open" label="Open" iconURI="platform:/plugin/de.hftstuttgart.buildingphysics.application/icons/open_in_app.png" command="_6wlLgMgZEeSyMNYR5xypkQ"/>
<children xsi:type="menu:HandledMenuItem" xmi:id="_6wlLjMgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handleditem.save" label="Save" iconURI="platform:/plugin/de.hftstuttgart.buildingphysics.application/icons/save_edit.png" command="_6wlLg8gZEeSyMNYR5xypkQ"/>
<children xsi:type="menu:HandledMenuItem" xmi:id="_6wlLjcgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handleditem.quit" label="Quit" command="_6wlLfMgZEeSyMNYR5xypkQ"/>
</children>
<children xsi:type="menu:Menu" xmi:id="_6wlLjsgZEeSyMNYR5xypkQ" elementId="help" label="Help">
<children xsi:type="menu:HandledMenuItem" xmi:id="_6wlLj8gZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handleditem.about" label="About" command="_6wlLhsgZEeSyMNYR5xypkQ"/>
</children>
</mainMenu>
<trimBars xmi:id="_6wlLlcgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.trimbar.top">
<children xsi:type="menu:ToolBar" xmi:id="_6wlLlsgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.main.toolbar">
<children xsi:type="menu:HandledToolItem" xmi:id="_rXiTQCWUEeux0PTSTJn6xg" elementId="de.hftstuttgart.buildingphysics.application.handleditem.trimbar.top.new" label="New..." command="_PnX_ACWUEeux0PTSTJn6xg"/>
<children xsi:type="menu:HandledToolItem" xmi:id="_6wlLl8gZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handleditem.trimbar.top.open" iconURI="platform:/plugin/de.hftstuttgart.buildingphysics.application/icons/open_in_app.png" command="_6wlLgMgZEeSyMNYR5xypkQ"/>
<children xsi:type="menu:HandledToolItem" xmi:id="_6wlLmMgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handleditem.trimbar.top.save" iconURI="platform:/plugin/de.hftstuttgart.buildingphysics.application/icons/save_edit.png" command="_6wlLg8gZEeSyMNYR5xypkQ"/>
</children>
</trimBars>
</children>
<handlers xmi:id="_LmGh8CWUEeux0PTSTJn6xg" elementId="de.hftstuttgart.buildingphysics.application.handler.newCommand" contributionURI="bundleclass://de.hftstuttgart.buildingphysics.application/de.hftstuttgart.buildingphysics.application.handlers.NewHandler" command="_PnX_ACWUEeux0PTSTJn6xg"/>
<handlers xmi:id="_6wlLgcgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handler.openCommand" contributionURI="bundleclass://de.hftstuttgart.buildingphysics.application/de.hftstuttgart.buildingphysics.application.handlers.OpenHandler" command="_6wlLgMgZEeSyMNYR5xypkQ"/>
<handlers xmi:id="_6wlLhMgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handler.saveCommand" contributionURI="bundleclass://de.hftstuttgart.buildingphysics.application/de.hftstuttgart.buildingphysics.application.handlers.SaveHandler" command="_6wlLg8gZEeSyMNYR5xypkQ"/>
<handlers xmi:id="_6wlLfcgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handler.quitCommand" contributionURI="bundleclass://de.hftstuttgart.buildingphysics.application/de.hftstuttgart.buildingphysics.application.handlers.QuitHandler" command="_6wlLfMgZEeSyMNYR5xypkQ"/>
<handlers xmi:id="_6wlLh8gZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.handler.aboutCommand" contributionURI="bundleclass://de.hftstuttgart.buildingphysics.application/de.hftstuttgart.buildingphysics.application.handlers.AboutHandler" command="_6wlLhsgZEeSyMNYR5xypkQ"/>
<bindingTables xmi:id="_6wlLfsgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.bindingtable" bindingContext="_6wlLecgZEeSyMNYR5xypkQ">
<bindings xmi:id="_6wlLf8gZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.keybinding.m1q" keySequence="M1+Q" command="_6wlLfMgZEeSyMNYR5xypkQ"/>
<bindings xmi:id="_6wlLgsgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.keybinding.m1o" keySequence="M1+O" command="_6wlLgMgZEeSyMNYR5xypkQ"/>
<bindings xmi:id="_6wlLhcgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.keybinding.m1s" keySequence="M1+S" command="_6wlLg8gZEeSyMNYR5xypkQ"/>
<bindings xmi:id="_6wlLiMgZEeSyMNYR5xypkQ" elementId="de.hftstuttgart.buildingphysics.application.keybinding.m1a" keySequence="M1+A" command="_6wlLhsgZEeSyMNYR5xypkQ"/>
</bindingTables>
<rootContext xmi:id="_6wlLecgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.contexts.dialogAndWindow" name="In Dialog and Windows">
<children xmi:id="_6wlLesgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.contexts.window" name="In Windows"/>
<children xmi:id="_6wlLe8gZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.contexts.dialog" name="In Dialogs"/>
</rootContext>
<descriptors xmi:id="_d_8I0CUMEeux0PTSTJn6xg" elementId="de.hftstuttgart.buildingphysics.application.partdescriptor.catalog" allowMultiple="true" closeable="true" contributionURI="bundleclass://de.hftstuttgart.buildingphysics.application/de.hftstuttgart.buildingphysics.application.parts.CatalogPart"/>
<commands xmi:id="_PnX_ACWUEeux0PTSTJn6xg" elementId="org.eclipse.ui.file.new" commandName="newCommand"/>
<commands xmi:id="_6wlLgMgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.file.open" commandName="openCommand"/>
<commands xmi:id="_6wlLg8gZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.file.save" commandName="saveCommand"/>
<commands xmi:id="_6wlLhsgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.help.aboutAction" commandName="aboutCommand"/>
<commands xmi:id="_6wlLfMgZEeSyMNYR5xypkQ" elementId="org.eclipse.ui.file.exit" commandName="quitCommand"/>
<addons xmi:id="_6wlLcsgZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.core.commands.service" contributionURI="bundleclass://org.eclipse.e4.core.commands/org.eclipse.e4.core.commands.CommandServiceAddon"/>
<addons xmi:id="_6wlLc8gZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.ui.contexts.service" contributionURI="bundleclass://org.eclipse.e4.ui.services/org.eclipse.e4.ui.services.ContextServiceAddon"/>
<addons xmi:id="_6wlLdMgZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.ui.bindings.service" contributionURI="bundleclass://org.eclipse.e4.ui.bindings/org.eclipse.e4.ui.bindings.BindingServiceAddon"/>
<addons xmi:id="_6wlLdcgZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.ui.workbench.commands.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.CommandProcessingAddon"/>
<addons xmi:id="_6wlLdsgZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.ui.workbench.handler.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.HandlerProcessingAddon"/>
<addons xmi:id="_6wlLd8gZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.ui.workbench.contexts.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench/org.eclipse.e4.ui.internal.workbench.addons.ContextProcessingAddon"/>
<addons xmi:id="_6wlLeMgZEeSyMNYR5xypkQ" elementId="org.eclipse.e4.ui.workbench.bindings.model" contributionURI="bundleclass://org.eclipse.e4.ui.workbench.swt/org.eclipse.e4.ui.workbench.swt.util.BindingProcessingAddon"/>
</application:Application>
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Application
Bundle-SymbolicName: de.hftstuttgart.buildingphysics.application;singleton:=true
Bundle-Version: 1.0.0.qualifier
Require-Bundle: javax.inject;bundle-version="0.0.0",
org.eclipse.core.runtime;bundle-version="0.0.0",
org.eclipse.swt;bundle-version="0.0.0",
org.eclipse.e4.ui.model.workbench;bundle-version="0.0.0",
org.eclipse.jface;bundle-version="0.0.0",
org.eclipse.e4.ui.services;bundle-version="0.0.0",
org.eclipse.e4.ui.workbench;bundle-version="0.0.0",
org.eclipse.e4.core.di;bundle-version="0.0.0",
org.eclipse.e4.ui.di;bundle-version="0.0.0",
org.eclipse.e4.core.contexts;bundle-version="0.0.0",
org.eclipse.emf.ecore,
org.eclipse.emf.edit,
org.eclipse.emf.ecp.ui.view.swt
Import-Package: de.hftstuttgart.buildingphysics,
javax.annotation;version="0.0.0"
Automatic-Module-Name: de.hftstuttgart.buildingphysics.application
source.. = src/
output.. = bin/
bin.includes = plugin.xml,\
META-INF/,\
.,\
icons/,\
css/default.css,\
Application.e4xmi
<?xml version="1.0" encoding="UTF-8"?>
<?pde version="3.5"?>
<product name="de.hftstuttgart.buildingphysics.application" uid="de.hftstuttgart.buildingphysics.application.product" id="de.hftstuttgart.buildingphysics.application.product" application="org.eclipse.e4.ui.workbench.swt.E4Application" version="1.0.0.qualifier" useFeatures="true" includeLaunchers="true">
<configIni use="default">
</configIni>
<launcherArgs>
<programArgs>-clearPersistedState
</programArgs>
<vmArgsMac>-XstartOnFirstThread -Dorg.eclipse.swt.internal.carbon.smallFonts
</vmArgsMac>
</launcherArgs>
<windowImages/>
<launcher>
<win useIco="false">
<bmp/>
</win>
</launcher>
<vm>
<macos include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-14</macos>
</vm>
<plugins>
</plugins>
<features>
<feature id="de.hftstuttgart.buildingphysics.feature"/>
<feature id="org.eclipse.e4.rcp"/>
<feature id="org.eclipse.emf.ecp.emfforms.runtime.feature"/>
<feature id="org.eclipse.emf.common"/>
<feature id="org.eclipse.emf.common.ui"/>
<feature id="org.eclipse.emf.databinding"/>
<feature id="org.eclipse.emf.databinding.edit"/>
<feature id="org.eclipse.emf.ecore"/>
<feature id="org.eclipse.emf.ecore.edit"/>
<feature id="org.eclipse.emf.edit"/>
<feature id="org.eclipse.emf.edit.ui"/>
</features>
<preferencesInfo>
<targetfile overwrite="false"/>
</preferencesInfo>
</product>
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
<extension
id="product"
point="org.eclipse.core.runtime.products">
<product
application="org.eclipse.e4.ui.workbench.swt.E4Application"
name="de.hftstuttgart.buildingphysics.application">
<property
name="appName"
value="de.hftstuttgart.buildingphysics.application">
</property>
</product>
</extension>
</plugin>
package de.hftstuttgart.buildingphysics.application.handlers;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
public class AboutHandler {
@Execute
public void execute(Shell shell) {
MessageDialog.openInformation(shell, "About", "HfT Stuttgart - Building Physics Catalog");
}
}
package de.hftstuttgart.buildingphysics.application.handlers;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
import org.eclipse.emf.common.command.BasicCommandStack;
import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
class HandlerUtils {
static final String CATALOG_PARTDESCRIPTOR_ID = "de.hftstuttgart.buildingphysics.application.partdescriptor.catalog";
public static String openFileDialog(Shell shell) {
return invokeFileDialog(new FileDialog(shell, SWT.OPEN));
}
public static String newFileDialog(Shell shell) {
return invokeFileDialog(new FileDialog(shell, SWT.SAVE));
}
private static String invokeFileDialog(FileDialog dialog) {
dialog.setFilterPath(System.getProperty("user.home"));
dialog.setFilterNames(new String [] {"Building Physics Catalog", "All Files (*)"});
dialog.setFilterExtensions(new String [] {"*.buildphys", "*"});
return dialog.open();
}
static void createNewPartWithCatalog(IEclipseContext context, EPartService partService, Resource resource) {
context.set(Resource.class, resource);
MPart catalogPart = partService.createPart(CATALOG_PARTDESCRIPTOR_ID);
catalogPart.setDirty(true); // must listen to adapter!
catalogPart.setLabel(resource.getURI().lastSegment());
partService.showPart(catalogPart, PartState.ACTIVATE);
}
static AdapterFactoryEditingDomain createEditingDomain() {
final AdapterFactory composedAdapterFactory = new ComposedAdapterFactory(
ComposedAdapterFactory.Descriptor.Registry.INSTANCE); // no dispose required?
final AdapterFactoryEditingDomain domain = new AdapterFactoryEditingDomain(composedAdapterFactory,
new BasicCommandStack());
return domain;
}
}
package de.hftstuttgart.buildingphysics.application.handlers;
import de.hftstuttgart.buildingphysics.BuildingPhysicsPackage;
import java.io.IOException;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.swt.widgets.Shell;
public class NewHandler {
@Execute
public void execute(MApplication application, @Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
EPartService partService) {
final String pathToNewCatalog = HandlerUtils.newFileDialog(shell);
if (pathToNewCatalog != null) {
// create new catalog with resource at above path
final AdapterFactoryEditingDomain domain = HandlerUtils.createEditingDomain();
final Resource energyCatalogResource = domain.createResource("file://" + pathToNewCatalog);
final EObject energyCatalog = EcoreUtil.create(BuildingPhysicsPackage.eINSTANCE.getBuildingPhysicsCatalog());
energyCatalogResource.getContents().add(energyCatalog);
// store new (empty) resource at selected path
try {
energyCatalogResource.save(null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
HandlerUtils.createNewPartWithCatalog(application.getContext(), partService, energyCatalogResource);
}
}
}
\ No newline at end of file
package de.hftstuttgart.buildingphysics.application.handlers;
import javax.inject.Named;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.services.IServiceConstants;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.edit.domain.AdapterFactoryEditingDomain;
import org.eclipse.swt.widgets.Shell;
public class OpenHandler {
@Execute
public void execute(MApplication application, @Named(IServiceConstants.ACTIVE_SHELL) Shell shell,
EPartService partService) {
final String pathToCatalog = HandlerUtils.openFileDialog(shell);
if (pathToCatalog != null) {
final AdapterFactoryEditingDomain domain = HandlerUtils.createEditingDomain();
System.out.println("Open catalog: " + pathToCatalog);
final Resource catalogResource = domain.loadResource("file://" + pathToCatalog);
HandlerUtils.createNewPartWithCatalog(application.getContext(), partService, catalogResource);
}
}
}
\ No newline at end of file
package de.hftstuttgart.buildingphysics.application.handlers;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.workbench.IWorkbench;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.widgets.Shell;
public class QuitHandler {
@Execute
public void execute(IWorkbench workbench, Shell shell){
if (MessageDialog.openConfirm(shell, "Confirmation",
"Do you want to exit?")) {
workbench.close();
}
}
}
package de.hftstuttgart.buildingphysics.application.handlers;
import org.eclipse.e4.core.di.annotations.CanExecute;
import org.eclipse.e4.core.di.annotations.Execute;
import org.eclipse.e4.ui.workbench.modeling.EPartService;
public class SaveHandler {
@CanExecute
public boolean canExecute(EPartService partService) {
if (partService != null) {
return !partService.getDirtyParts().isEmpty();
}
return false;
}
@Execute
public void execute(EPartService partService) {
partService.saveAll(false);
}
}
\ No newline at end of file
package de.hftstuttgart.buildingphysics.application.parts;
import java.io.IOException;
import javax.annotation.PostConstruct;
import org.eclipse.e4.ui.di.Persist;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecp.ui.view.ECPRendererException;
import org.eclipse.emf.ecp.ui.view.swt.ECPSWTViewRenderer;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
/**
* Part for displaying a Forms Editor for a Building Physics Catalog.
*/
public class CatalogPart {
private Resource catalogResource;
@PostConstruct
public void createComposite(MApplication application, Composite parent) {
catalogResource = application.getContext().get(Resource.class);
EObject energyCatalog = catalogResource.getContents().get(0);
try {
final Composite content = new Composite(parent, SWT.NONE);
content.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
content.setLayout(GridLayoutFactory.fillDefaults().margins(10, 10).create());
ECPSWTViewRenderer.INSTANCE.render(content, energyCatalog);
content.layout();
} catch (final ECPRendererException e) {
e.printStackTrace();
}
parent.layout();
}
@Persist
public void save() {
System.out.println("Saved " + catalogResource);
try {
catalogResource.save(null);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>de.hftstuttgart.buildingphysics.feature</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.pde.FeatureBuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.pde.FeatureNature</nature>
</natures>
</projectDescription>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment