Skip to content
Snippets Groups Projects
Commit 2123a302 authored by Goik Martin's avatar Goik Martin
Browse files

Alpha version Unix --> SQL

parent d0174cfc
No related branches found
No related tags found
No related merge requests found
Showing
with 455 additions and 0 deletions
/target/
/.settings/
SELECT * from SysGroup;
DELETE FROM SysGroup;
\ No newline at end of file
DROP Table IF EXISTS SysUserGroup;
DROP Table IF EXISTS SysUser;
DROP Table IF EXISTS SysGroup;
CREATE TABLE SysGroup ( -- The system's groups --
id INTEGER AUTO_INCREMENT PRIMARY KEY
,gid CHAR(20) NOT NULL UNIQUE -- The groups unique name e.g. 'users' --
,gidNumber INTEGER NOT NULL UNIQUE -- The groups unique numerical value e.g. 1332 --
);
UPDATE SysGroup SET id=20 WHERE id=2;
CREATE TABLE SysUser (
id INTEGER AUTO_INCREMENT PRIMARY KEY
,uid CHAR(20) NOT NULL UNIQUE -- The user's unique login name e.g. 'goik' --
,uidNumber INTEGER NOT NULL UNIQUE -- The user's unique uid number value--
,primaryGidNumber INTEGER NOT NULL -- The user's primary group --
REFERENCES SysGroup
,cname VARCHAR(255) -- The user's common name e.g. 'Martin Goik' --
,homeDirectory VARCHAR(255) NOT NULL -- The user's home directory e.g. '/home/goik' --
,shell VARCHAR(255) NOT NULL -- The user's login shell e.g. '/bin/bash' --
);
CREATE TABLE SysUserGroup (
sysuser INTEGER NOT NULL REFERENCES SysUser
,sysgroup INTEGER NOT NULL REFERENCES SysGroup
,PRIMARY KEY(sysuser, sysgroup)
)
root:x:0:
daemon:x:1:julio,spinello
users:x:30:
admin:x:15:
guest:x:3:
extra:x:7:spinello
root:x:0:0:root:/root:/bin/bash
bruch:x:2:30:Niesha Bruch:/home/bruch:/bin/bash
gastellum:x:3:30:Rueben Gastellum:/home/gastellum:/bin/tcsh
julio:x:4:30:Dewitt Julio:/home/julio:/bin/bash
spinello:x:7:15:Charisse Spinello:/home/spinello:/bin/bash
devereux:x:10:30:Luisa Devereux:/home/devereux:/bin/tcsh
sandlin:x:15:30:Domonique Sandlin:/home/sandlin:/bin/ksh
elkan:x:12:3:Brynn Elkan:/guest/elkan:/bin/bash
kham:x:17:3:Bettina Kham:/guest/kham:/bin/bash
vanwyhe:x:18:30:Juan Vanwyhe:/home/vanwyhe:/bin/ksh
\ No newline at end of file
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>de.hdm-stuttgart.mi.sda2</groupId>
<artifactId>usermanage</artifactId>
<version>0.9</version>
<packaging>jar</packaging>
<name>mi-maven-archetype-quickstart</name>
<url>http://mi.hdm-stuttgart.de</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.33</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
package de.hdm_stuttgart.mi.sda2.usermanage;
import java.util.MissingResourceException;
import java.util.ResourceBundle;
public class Cfg {
private static final String BUNDLE_NAME = "de.hdm_stuttgart.mi.sda2.usermanage.jdbc"; //$NON-NLS-1$
private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle
.getBundle(BUNDLE_NAME);
private Cfg() {
}
public static String get(String key) {
try {
return RESOURCE_BUNDLE.getString(key);
} catch (MissingResourceException e) {
return '!' + key + '!';
}
}
}
package de.hdm_stuttgart.mi.sda2.usermanage;
import java.sql.SQLException;
import de.hdm_stuttgart.mi.sda2.usermanage.parse.ParseError;
import de.hdm_stuttgart.mi.sda2.usermanage.parse.Parser;
import de.hdm_stuttgart.mi.sda2.usermanage.rdbms.RdbmsHandler;
/**
*
*
*/
public class Driver {
public static void main(String[] args) {
try {
final RdbmsHandler dbHandler = new RdbmsHandler();
dbHandler.connect();
final Parser parser = new Parser(dbHandler, "Testdata/group", "Testdata/passwd");
parser.insertData();
} catch (ParseError e) {
System.err.println(e.getMessage());
System.exit(1);
} catch (SQLException e) {
System.err.println("Unable to connect to database server");
System.exit(1);
}
}
}
RdbmsHandler.driverClassName=com.mysql.jdbc.Driver
# See http://stackoverflow.com/questions/2993251/jdbc-batch-insert-performance
RdbmsHandler.jdbcUrl=jdbc:mysql://localhost:3306/hdm?rewriteBatchedStatements=true
RdbmsHandler.password=XYZ
RdbmsHandler.user=hdmuser
package de.hdm_stuttgart.mi.sda2.usermanage.parse;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
public class Group {
private static Logger log = Logger
.getLogger(Group.class);
public static final Map<String, Set<Group>> secondaryGroupsByUid = new HashMap<String, Set<Group>>();
public static final Set<Group> groups = new HashSet<Group>();
public Group(final String groupLine, int row)
throws ParseError {
log.debug("Parsing group file line " + row + ":" + groupLine);
int csvIndex = 0;
final String [] components = groupLine.split(":");
log.debug("Found " + components.length + " CSV components");
// row 1
gid = components[csvIndex++];
csvIndex++; // We ignore the second CSV entry ("x") in row 2
// row 3
try {
gidNumber = Integer.parseInt(components[csvIndex++]);
} catch (NumberFormatException e) {
throw new ParseError("is not an integer (group)", row, csvIndex, components[csvIndex]);
}
// Optional row 4
if (4 == components.length) { // Secondary memberships
for (String uid : components[csvIndex++].split(",")) {
log.debug("Adding secondary user '" + uid + "' to group '" + gid + "'");
Set<Group> secondaryGroups = secondaryGroupsByUid.get(uid);
if (null == secondaryGroups) {
secondaryGroups = new HashSet<Group>();
secondaryGroupsByUid.put(uid, secondaryGroups);
}
secondaryGroups.add(this);
}
}
groups.add(this);
}
public final String gid;
public final int gidNumber;
private int databaseId = 0;
public int getDatabaseId() {
return databaseId;
}
public void setDatabaseId(int databaseId) {
this.databaseId = databaseId;
}
@Override
public int hashCode() {
return gidNumber;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Group) {
return gidNumber == ((Group)obj).gidNumber;
}
return super.equals(obj);
}
}
package de.hdm_stuttgart.mi.sda2.usermanage.parse;
public class ParseError extends Exception {
private static final long serialVersionUID = -4595401874181463130L;
public ParseError(final String msg) {
super(msg);
}
public ParseError(final String explain, final int row, final int index,
final String fieldValue) {
super("Line " + row + ", field " + index + ": Value " + fieldValue
+ " " + explain);
}
}
package de.hdm_stuttgart.mi.sda2.usermanage.parse;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import de.hdm_stuttgart.mi.sda2.usermanage.rdbms.RdbmsHandler;
public class Parser {
final RdbmsHandler rdbmsHandler;
public Parser(final RdbmsHandler rdbmsHandler, final String groupFile, final String passwdFile)
throws ParseError {
this.rdbmsHandler = rdbmsHandler;
final BufferedReader groupStream = openFile(groupFile);
try {
String line;
int lineNo = 1;
while ( null != (line = groupStream.readLine())){
new Group(line, lineNo++);
}
} catch (IOException e) {
throw new ParseError("Unable to read from file '" +
groupFile+ "'");
}
}
public void insertData() {
rdbmsHandler.addGroups(Group.groups);
}
BufferedReader openFile (final String filename)
throws ParseError {
try {
return new BufferedReader(new FileReader(filename));
} catch (FileNotFoundException e) {
throw new ParseError("Unable to open file '" + filename + "' for reading");
}
}
}
package de.hdm_stuttgart.mi.sda2.usermanage.parse;
public class User {
public User(final String passwdLine, int row)
throws ParseError {
int csvIndex = 0;
final String [] components = passwdLine.split(":");
if (7 != components.length) {
}
// row 1
uid = components[csvIndex++];
csvIndex++; // We ignore the second CSV entry ("x") in row 2
// row 3
try {
uidNumber = Integer.parseInt(components[csvIndex++]);
} catch (NumberFormatException e) {
throw new ParseError("is not an integer (passwd)", row, csvIndex, components[csvIndex]);
}
// row 4
try {
gidNumber = Integer.parseInt(components[csvIndex++]);
} catch (NumberFormatException e) {
throw new ParseError("is not an integer (passwd)", row, csvIndex, components[csvIndex]);
}
// row 5
cname = components[csvIndex++];
// row 6
homeDirectory = components[csvIndex++];
// row 7
shell= components[csvIndex++];
}
public final String uid;
public final int uidNumber;
public final int gidNumber;
public final String cname;
public final String homeDirectory;
public final String shell;
}
package de.hdm_stuttgart.mi.sda2.usermanage.rdbms;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Set;
import org.apache.log4j.Logger;
import de.hdm_stuttgart.mi.sda2.usermanage.Cfg;
import de.hdm_stuttgart.mi.sda2.usermanage.parse.Group;
public class RdbmsHandler {
private static Logger log = Logger
.getLogger(RdbmsHandler.class);
private final String insertGroupSql = "INSERT INTO SysGroup (gid, gidNumber) VALUES (? , ?)";
private PreparedStatement insertGroupStmt;
static {
try {
Class.forName(Cfg.get("RdbmsHandler.driverClassName"));
} catch (ClassNotFoundException e) {
System.err.println("Unable to register JDBC driver '"
+ Cfg.get("RdbmsHandler.jdbcUrl") + "'");
System.exit(1);
}
}
Connection conn = null;
public void connect() throws SQLException {
if (null != conn) {
conn.rollback();
conn.close();
}
conn = DriverManager.getConnection(Cfg.get("RdbmsHandler.jdbcUrl"),
Cfg.get("RdbmsHandler.user"), Cfg.get("RdbmsHandler.password"));
conn.setAutoCommit(false);
insertGroupStmt = conn.prepareStatement(insertGroupSql, Statement.RETURN_GENERATED_KEYS);
}
public void addGroups(final Set<Group> groups) {
try {
for (final Group g : groups) {
insertGroupStmt.setString(1, g.gid);
insertGroupStmt.setInt(2, g.gidNumber);
insertGroupStmt.executeUpdate();
addGeneratedId(insertGroupStmt, g);
}
conn.commit();
} catch (SQLException e) {
e.printStackTrace();
}
}
static void addGeneratedId(final PreparedStatement stmt, final Group group)
throws SQLException {
final ResultSet rs = stmt.getGeneratedKeys();
if (rs.next()) {
final int ret = rs.getInt(1);
log.info("Generated id=" + ret);
group.setDatabaseId(ret);
} else {
log.fatal("No id found for group '" + group.gid + "', exiting!");
System.exit(1);
}
}
}
#Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1
# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%p: %m at %c.%M(%C{1}.java:%L)%n
# Specific log level per-class/package rules
#log4j.logger.de.hdm_stuttgart.mi.sda2.usermanage.parse.Group=INFO
package de.hdm_stuttgart.mi.sda2.usermanage;
import org.junit.Assert;
import org.junit.Test;
/**
* Unit test for simple App.
*/
public class UserTest {
@Test
public void testApp() {
Assert.assertTrue( true );
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment