Skip to content

Commit

Permalink
Initial service project
Browse files Browse the repository at this point in the history
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@946666 13f79535-47bb-0310-9956-ffa450edef68
  • Loading branch information
Peter Kriens committed May 20, 2010
1 parent 1ec14fe commit de0b31b
Show file tree
Hide file tree
Showing 3 changed files with 334 additions and 0 deletions.
65 changes: 65 additions & 0 deletions service/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you 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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<parent>
<groupId>org.apache.felix</groupId>
<artifactId>felix-parent</artifactId>
<version>1.2.1</version>
<relativePath>../pom.xml</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>
<name>Apache Felix File Service</name>
<description>Combines OSGi service definitions developed collaboratively at Apache Felix</description>
<url>http://felix.apache.org/site/service.html</url>
<version>0.0.1-SNAPSHOT</version>
<groupId>org.apache.felix</groupId>
<artifactId>service</artifactId>
<dependencies>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.core</artifactId>
<version>1.4.0</version>
<type>bundle</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>1.4.0</version>
<type>bundle</type>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>2.0.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<_include>bnd.bnd</_include>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
268 changes: 268 additions & 0 deletions service/src/main/java/org/apache/felix/service/terminal/Terminal.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,268 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.apache.felix.service.terminal;

import java.io.*;

/**
* Terminal.
*
* The Terminal interface describes a minimal terminal that can easily be mapped
* to command line editing tools.
*
* A Terminal is associated with an Input Stream and an Output Stream. The Input
* Stream represents the keyboard and the Output Stream the screen.
*
* A terminal does not block the input, each character is returned as it is
* typed, no buffering or line editing takes place, characters are also not
* echoed. However, the Input Stream is not restricted to bytes only, it can
* also return translated key strokes. Integers from 1000 are used for those.
* Not all keys have to be supported by an implementation.
*
* A number of functions is provided to move the cursor and erase
* characters/lines/screens. Any text outputed to the Output Stream is
* immediately added to the cursor position, which is then moved forwards. The
* control characters (LF,CR,TAB,BS) perform their normal actions. However lines
* do not wrap. Text typed that is longer than the window will not be visible,
* it is the responsibility of the sender to ensure this does not happen.
*
* A screen is considered to be {@link #height()} lines that each have
* {@link #width()} characters. For cursor positioning, the screen is assumed to
* be starting at 0,0 and increases its position from left to right and from top
* to bottom. Positioning outside the screen bounds is undefined.
*/
public interface Terminal {
/**
* Cursor up key
*/
int CURSOR_UP = 1000;
/**
* Cursor down key.
*/
int CURSOR_DOWN = 1001;
/**
* Cursors forward key. Usually right.
*/
int CURSOR_FORWARD = 1002;

/**
* Cursors backward key. Usually left.
*/
int CURSOR_BACKWARD = 1003;

/**
* Page up key
*/
int PAGE_UP = 1004;
/**
* Page down key
*/
int PAGE_DOWN = 1005;
/**
* Home key
*/
int HOME = 1006;
/**
* End key
*/
int END = 1007;
/**
* Insert key
*/
int INSERT = 1008;
/**
* Delete key
*/
int DELETE = 1009;
/**
* Break key
*/
int BREAK = 1009;
/**
* Function key 1
*/
int F1 = 1101;
/**
* Function key 2
*/
int F2 = 1102;
/**
* Function key 3
*/
int F3 = 1103;
/**
* Function key 4
*/
int F4 = 1104;
/**
* Function key 5
*/
int F5 = 1105;
/**
* Function key 6
*/
int F6 = 1106;
/**
* Function key 7
*/
int F7 = 1107;
/**
* Function key 8
*/
int F8 = 1108;
/**
* Function key 9
*/
int F9 = 1109;
/**
* Function key 10
*/
int F10 = 1110;
/**
* Function key 11
*/
int F11 = 1111;
/**
* Function key 12
*/
int F12 = 1112;

enum Attribute {
BLINK, UNDERLINE, STRIKE_THROUGH, BOLD, DIM, REVERSED;
}

enum Color {
NONE, BLACK, GREEN, YELLOW, MAGENTA, CYAN, BLUE, RED, WHITE;
}

/**
* Return the associated Input Stream that represents the keyboard. Note
* that this InputStream can return values > 256, these characters are
* defined in this interface as special keys. This Input Stream should not
* be closed by the client. If the client is done, it should unget the
* services.
*
* @return the current Input Stream.
*/
InputStream getInputStream();

/**
* Return the Output Stream that is associated with the screen. Any writes
* Clear the complete screen and position the cursor at 0,0.
*
* @throws Exception
*/
void clear() throws Exception;

/**
* Leave the cursor where it is but clear the remainder of the line.
*/
void eraseEndOfLine();

/**
* Move the cursor up one line, this must not cause a scroll if the cursor
* moves off the screen.
*
* @throws Exception
*/
void up() throws Exception;

/**
* Move the cursor down one line, this must not cause a scroll if the
* cursors moves off the screen.
*
* @throws Exception
*/
void down() throws Exception;

/**
* Move the cursor backward. Must not wrap to previous line.
*
* @throws Exception
*/
void backward() throws Exception;

/**
* Move the cursor forward. Must not wrap to next line if the cursor becomes
* higher than the width.
*
* @throws Exception
*/
void forward() throws Exception;

/**
* Return the actual width of the screen. Some screens can change their size
* and this method must return the actual width.
*
* @return the width of the screen.
*
* @throws Exception
*/
int width() throws Exception;

/**
* Return the actual height of the screen. Some screens can change their
* size and this method must return the actual height.
*
* @return the height of the screen.
*
* @throws Exception
*/
int height() throws Exception;

/**
* Return the current cursor position.
*
* The position is returned as an array of 2 elements. The first element is
* the x position and the second elements is the y position. Both are zero
* based.
*
* @return the current position or null if not possible.
*
* @throws Exception
*/
int[] getPosition() throws Exception;

/**
* Position the cursor on the screen. Positioning starts at 0,0 and the
* maxium value is given by {@link #width()}, {@link #height()}. The visible
* cursor is moved to this position and text insertion will continue from
* that position.
*
* @param x
* The x position, must be from 0-width
* @param y
* The y position, must be from 0-height
* @throws IllegalArgumenException
* when x or y is not in range
* @throws Exception
*/
boolean position(int x, int y) throws Exception;

/**
* Set the attributes of the text to outputed. This method
* must reset all current attributes. That is, attributes
* are not inherited from the current position.
*
* @param foreground The foreground color
* @param background The background color (around the character)
* @param attr A number of attributes.
*/
boolean attributes(Color foreground, Color background, Attribute... attr);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
version 0.0.1

0 comments on commit de0b31b

Please sign in to comment.