initial commit
53
.gitignore
vendored
Normal file
|
@ -0,0 +1,53 @@
|
|||
#
|
||||
# Git ignore for fsim
|
||||
#
|
||||
|
||||
### Forbidden
|
||||
*.log
|
||||
*.cache
|
||||
*.class
|
||||
*.so
|
||||
*.dll
|
||||
|
||||
### Temp
|
||||
*~
|
||||
.tmp
|
||||
*.bak
|
||||
*.swp
|
||||
.~lock.*
|
||||
.kate-swp
|
||||
|
||||
### Eclipse
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### IntelliJ IDEA
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### NetBeans
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
|
||||
### VS Code
|
||||
.vscode/
|
||||
|
||||
# mac finder
|
||||
.DS_Store
|
||||
|
||||
# windows exploder
|
||||
Thumbs.db
|
||||
|
||||
# kde dolphin
|
||||
.directory
|
3
WebRoot/META-INF/MANIFEST.MF
Normal file
|
@ -0,0 +1,3 @@
|
|||
Manifest-Version: 1.0
|
||||
Class-Path:
|
||||
|
74
WebRoot/META-INF/context.xml
Normal file
|
@ -0,0 +1,74 @@
|
|||
<?xml version="1.0"?>
|
||||
<Context path="/"
|
||||
docBase="${catalina.home}/webapps/ROOT"
|
||||
debug="5"
|
||||
reloadable="true"
|
||||
crossContext="true"
|
||||
>
|
||||
|
||||
|
||||
<Resource name="mail/Session"
|
||||
auth="Container"
|
||||
type="javax.mail.Session"
|
||||
/>
|
||||
<ResourceParams name="mail/Session">
|
||||
<parameter>
|
||||
<name>mail.smtp.host</name>
|
||||
<value>localhost</value>
|
||||
</parameter>
|
||||
</ResourceParams>
|
||||
|
||||
<!--
|
||||
<Resource name="jdbc/fsim_dba"
|
||||
description="DB Connection for fsim"
|
||||
scope="Shareable"
|
||||
auth="Container"
|
||||
type="com.mchange.v2.c3p0.ComboPooledDataSource"
|
||||
|
||||
maxPoolSize="4"
|
||||
minPoolSize="2"
|
||||
acquireIncrement="1"
|
||||
|
||||
driverClass="org.postgresql.Driver"
|
||||
user="fsim"
|
||||
password="fsim"
|
||||
factory="org.apache.naming.factory.BeanFactory"
|
||||
jdbcUrl="jdbc:postgresql://localhost/fsim"
|
||||
/>
|
||||
-->
|
||||
<Resource name="jdbc/fsim_dba"
|
||||
scope="Shareable"
|
||||
type="javax.sql.DataSource"
|
||||
auth="Container"
|
||||
factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
|
||||
accessToUnderlyingConnectionAllowed="false"
|
||||
|
||||
defaultAutoCommit="false"
|
||||
defaultReadOnly="false"
|
||||
defaultTransactionIsolation="READ_COMMITTED"
|
||||
|
||||
validationQuery="select 1"
|
||||
testOnBorrow="true"
|
||||
testOnReturn="false"
|
||||
testWhileIdle="false"
|
||||
|
||||
initialSize="5"
|
||||
minIdle="2"
|
||||
maxIdle="10"
|
||||
maxActive="20"
|
||||
maxWait="6000"
|
||||
|
||||
removeAbandoned="true"
|
||||
removeAbandonedTimeout="5"
|
||||
logAbandoned="true"
|
||||
|
||||
timeBetweenEvictionRunsMillis="2000"
|
||||
minEvictableIdleTimeMillis="20000"
|
||||
numTestsPerEvictionRun="5"
|
||||
|
||||
driverClassName="org.postgresql.Driver"
|
||||
username="fsim" password="fsim"
|
||||
url="jdbc:postgresql://localhost/fsim"
|
||||
/>
|
||||
|
||||
</Context>
|
|
@ -0,0 +1,36 @@
|
|||
|
||||
fsim.title = FSIM: File Search Index Machine
|
||||
|
||||
fsim.logo.alt = fsim-logo
|
||||
fsim.logo.title = FSIM Searcher
|
||||
|
||||
fsim.header.title = File Search
|
||||
|
||||
fsim.topbar.results = Results:
|
||||
fsim.topbar.resultsin = found in:
|
||||
fsim.topbar.inms = ms.
|
||||
|
||||
fsim.search.button = Search
|
||||
|
||||
|
||||
fsim.bottombar.rendered = Rendered in:
|
||||
fsim.bottombar.inms = ms.
|
||||
|
||||
fsim.copyright = <br/>Fsim is a product of idca.nl<br/>(c)2005 idca
|
||||
|
||||
fsim.tech.vcss.alt = Valid CSS
|
||||
fsim.tech.vcss.title = This page has an valid css file.
|
||||
fsim.tech.xhtml11.alt = Valid XHML 1.1
|
||||
fsim.tech.xhtml11.title = This page is build with XHTML technolocy.
|
||||
fsim.tech.debian.alt = debian-logo
|
||||
fsim.tech.debian.title = This service runs on Debian.
|
||||
fsim.tech.java.alt = java-logo
|
||||
fsim.tech.java.title = This service is written in java.
|
||||
fsim.tech.postgres.alt = postgresql-logo
|
||||
fsim.tech.postgres.title= This service uses an PostgreSQL DB.
|
||||
fsim.tech.linux.alt = linux-logo
|
||||
fsim.tech.linux.title = The OS runs Linux.
|
||||
fsim.tech.tomcat.alt = tomcat-logo
|
||||
fsim.tech.tomcat.title = Tomcat 5 J2EE WebServer.
|
||||
|
||||
fsim.text = foo {0} bar
|
|
@ -0,0 +1,9 @@
|
|||
|
||||
|
||||
fsim.test = Mmmm dit is een test
|
||||
|
||||
|
||||
fsim.copyright = Fsim is a product of idca.nl<br/>(c)2005 idca
|
||||
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
logging-development.properties
|
|
@ -0,0 +1,26 @@
|
|||
#
|
||||
# COPY THIS FILE TO: logging-development.properties
|
||||
# and set the properties correctly
|
||||
#
|
||||
|
||||
# Specify the handlers to create in the root logger
|
||||
# (all loggers are children of the root logger)
|
||||
# The following creates two handlers
|
||||
handlers = java.util.logging.ConsoleHandler
|
||||
|
||||
# Set the default logging level for new ConsoleHandler instances
|
||||
java.util.logging.ConsoleHandler.level = ALL
|
||||
|
||||
# Set the default formatter for new ConsoleHandler instances ( was java.util.logging.SimpleFormatter)
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
|
||||
# Set the default logging level for the root logger
|
||||
.level = INFO
|
||||
|
||||
#org.apache.tomcat.level = ALL
|
||||
#org.apache.catalina.level = ALL
|
||||
#org.apache.jasper.level = ALL
|
||||
#org.apache.commons.level = ALL
|
||||
#org.apache.myfaces.level = ALL
|
||||
#org.hibernate.level = ALL
|
||||
#com.opensymphony.oscache.level = ALL
|
|
@ -0,0 +1,29 @@
|
|||
#
|
||||
# THIS ARE THE LIVE logging properties
|
||||
# when the context parameter "DEVELOPMENT" on true is set
|
||||
# then we will try to read logging-development.properties.
|
||||
# this parameter should be set in web-override.xml
|
||||
#
|
||||
|
||||
#
|
||||
# Specify the handlers to create in the root logger
|
||||
# (all loggers are children of the root logger)
|
||||
# The following creates two handlers
|
||||
handlers = java.util.logging.ConsoleHandler
|
||||
|
||||
# Set the default logging level for new ConsoleHandler instances
|
||||
java.util.logging.ConsoleHandler.level = INFO
|
||||
|
||||
# Set the default formatter for new ConsoleHandler instances ( was java.util.logging.SimpleFormatter)
|
||||
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
|
||||
|
||||
# Set the default logging level for the root logger
|
||||
.level = INFO
|
||||
|
||||
#org.apache.tomcat.level = ALL
|
||||
#org.apache.catalina.level = ALL
|
||||
#org.apache.jasper.level = ALL
|
||||
#org.apache.commons.level = ALL
|
||||
#org.apache.myfaces.level = ALL
|
||||
#org.hibernate.level = ALL
|
||||
#com.opensymphony.oscache.level = ALL
|
92
WebRoot/WEB-INF/fsim.xml
Normal file
|
@ -0,0 +1,92 @@
|
|||
<?xml version="1.0"?>
|
||||
<fsimConfig name="WTH-SEARCH">
|
||||
|
||||
<pluginPage name="file_mirrors"
|
||||
file="/fragments/searchers/files/file_mirrors.jsp"
|
||||
/>
|
||||
<pluginPage name="file_redirect"
|
||||
file="/fragments/searchers/files/file_redirect.jsp"
|
||||
/>
|
||||
<pluginPage name="host_browse"
|
||||
file="/fragments/searchers/files/host_browse.jsp"
|
||||
/>
|
||||
<pluginPage name="host_redirect"
|
||||
file="/fragments/searchers/files/host_redirect.jsp"
|
||||
/>
|
||||
<pluginPage name="path_browse"
|
||||
file="/fragments/searchers/files/path_browse.jsp"
|
||||
/>
|
||||
<pluginPage name="path_redirect"
|
||||
file="/fragments/searchers/files/path_redirect.jsp"
|
||||
/>
|
||||
|
||||
<!--
|
||||
<database name="fsim_db"
|
||||
driver="org.postgresql.Driver"
|
||||
url="jdbc:postgresql://dbhost/fsim"
|
||||
username="fsimdb"
|
||||
password="bdmisf"
|
||||
/>
|
||||
-->
|
||||
|
||||
<listener class="com.idca.fsim.searchers.files.FilesListener"/>
|
||||
|
||||
<optionRenderer dataModel="com.idca.fsim.searchers.files.models.File"
|
||||
optionRenderer="com.idca.fsim.searchers.files.renderers.options.FileDownloadOptionRenderer"
|
||||
/>
|
||||
<optionRenderer dataModel="com.idca.fsim.searchers.files.models.File"
|
||||
optionRenderer="com.idca.fsim.searchers.files.renderers.options.FileDownloadOptionRenderer"
|
||||
/>
|
||||
<optionRenderer dataModel="com.idca.fsim.searchers.files.models.File"
|
||||
optionRenderer="com.idca.fsim.searchers.files.renderers.options.FileDownloadOptionRenderer"
|
||||
/>
|
||||
|
||||
<!-- this is really an DB saerchSource...maybe include others.(v2) -->
|
||||
<searchSource name="fsim-files"
|
||||
searchSource="com.idca.fsim.core.plugins.DBSearchSource"
|
||||
dataModel="com.idca.fsim.searchers.generic.models.File"
|
||||
indexer="com.idca.fsim.core.plugins.DBIndexer"
|
||||
resultCollector="com.idca.fsim.searchers.files.collectors.FileResultCollector"
|
||||
resultRenderer="com.idca.fsim.searchers.files.renderers.FileResultRenderer"
|
||||
resultCacheResolver=""
|
||||
|
||||
dbName="fsim_dba"
|
||||
tableName="file"
|
||||
idColumnName="id"
|
||||
searchColumnName="name"
|
||||
>
|
||||
<!--
|
||||
<initParam name="DB_NAME" value="fsim_dba"/>
|
||||
<initParam name="TABLE_NAME" value="fsim_file"/>
|
||||
<initParam name="ID_COLUMN_NAME" value="file"/>
|
||||
<initParam name="SEARCH_COLUMN_NAME" value="name"/>
|
||||
|
||||
<hitParamLong1 name="size"/>
|
||||
<hitParamLong2 name="date"/>
|
||||
-->
|
||||
</searchSource>
|
||||
|
||||
<searchSource name="fsim-paths"
|
||||
searchSource="com.idca.fsim.core.plugins.DBSearchSource"
|
||||
dataModel="com.idca.fsim.searchers.generic.models.Path"
|
||||
indexer="com.idca.fsim.core.plugins.DBIndexer"
|
||||
dbName="fsim_dba"
|
||||
tableName="path"
|
||||
idColumnName="id"
|
||||
searchColumnName="directory"
|
||||
resultCollector="com.idca.fsim.searchers.files.collectors.PathResultCollector"
|
||||
resultRenderer="com.idca.fsim.searchers.files.renderers.PathResultRenderer"
|
||||
/>
|
||||
<searchSource name="fsim-hosts"
|
||||
searchSource="com.idca.fsim.core.plugins.DBSearchSource"
|
||||
dataModel="com.idca.fsim.searchers.generic.models.Host"
|
||||
indexer="com.idca.fsim.core.plugins.DBIndexer"
|
||||
dbName="fsim_dba"
|
||||
tableName="host"
|
||||
idColumnName="id"
|
||||
searchColumnName="hostname"
|
||||
resultCollector="com.idca.fsim.searchers.files.collectors.HostResultCollector"
|
||||
resultRenderer="com.idca.fsim.searchers.files.renderers.HostResultRenderer"
|
||||
/>
|
||||
|
||||
</fsimConfig>
|
BIN
WebRoot/WEB-INF/lib/commons-beanutils-core.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-beanutils-src.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-codec.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-collections-3.1.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-digester.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-el.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-lang.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-logging.jar
Normal file
BIN
WebRoot/WEB-INF/lib/commons-validator.jar
Normal file
BIN
WebRoot/WEB-INF/lib/dom.jar
Normal file
BIN
WebRoot/WEB-INF/lib/foei-xml.jar
Normal file
BIN
WebRoot/WEB-INF/lib/jaxen-full.jar
Normal file
BIN
WebRoot/WEB-INF/lib/jaxp-api.jar
Normal file
BIN
WebRoot/WEB-INF/lib/jstl.jar
Normal file
BIN
WebRoot/WEB-INF/lib/mail.jar
Normal file
BIN
WebRoot/WEB-INF/lib/myfaces-all-src.jar
Normal file
BIN
WebRoot/WEB-INF/lib/myfaces-all.jar
Normal file
BIN
WebRoot/WEB-INF/lib/objectprofiler.jar
Normal file
BIN
WebRoot/WEB-INF/lib/oscache-2.1.jar
Normal file
BIN
WebRoot/WEB-INF/lib/pg74jdbc3.jar
Normal file
BIN
WebRoot/WEB-INF/lib/sax.jar
Normal file
BIN
WebRoot/WEB-INF/lib/saxpath.jar
Normal file
BIN
WebRoot/WEB-INF/lib/standard.jar
Normal file
BIN
WebRoot/WEB-INF/lib/xalan.jar
Normal file
BIN
WebRoot/WEB-INF/lib/xercesImpl.jar
Normal file
BIN
WebRoot/WEB-INF/lib_src/commons-collections-3.1-src.jar
Normal file
BIN
WebRoot/WEB-INF/lib_src/objectprofiler-src.jar
Normal file
175
WebRoot/WEB-INF/web.xml
Normal file
|
@ -0,0 +1,175 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<web-app version="2.4"
|
||||
xmlns="http://java.sun.com/xml/ns/j2ee"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
|
||||
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
|
||||
<!--
|
||||
Copyright 2004-2006 IDCA. All rights reserved.
|
||||
IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
-->
|
||||
|
||||
<!--
|
||||
=========== GENERAL CONFIG
|
||||
-->
|
||||
|
||||
<display-name>FSIM</display-name>
|
||||
<description>FSIM: File Search Index Machine</description>
|
||||
|
||||
<session-config>
|
||||
<session-timeout>1</session-timeout>
|
||||
<!-- An 1min session. -->
|
||||
</session-config>
|
||||
|
||||
<welcome-file-list>
|
||||
<!-- this file redirects to /search -->
|
||||
<welcome-file>/index.jsp</welcome-file>
|
||||
</welcome-file-list>
|
||||
|
||||
<context-param>
|
||||
<description>The fsimcontext xml file</description>
|
||||
<param-name>FSIM_CONFIG_FILE</param-name>
|
||||
<param-value>/WEB-INF/fsim.xml</param-value>
|
||||
</context-param>
|
||||
|
||||
<context-param>
|
||||
<description>
|
||||
All servlets / listeners and filters use
|
||||
this context.
|
||||
</description>
|
||||
<param-name>FsimContextName</param-name>
|
||||
<param-value>WTH-SEARCH</param-value>
|
||||
</context-param>
|
||||
|
||||
<context-param>
|
||||
<description>
|
||||
The page when a host is blocked.
|
||||
note: should be on other server ivm DDOS
|
||||
</description>
|
||||
<param-name>hostBlockedRedirectURL</param-name>
|
||||
<param-value>/denied/host_blocked.jsp</param-value>
|
||||
</context-param>
|
||||
|
||||
|
||||
<!--
|
||||
================== LISTENERS ========================
|
||||
-->
|
||||
|
||||
|
||||
<listener>
|
||||
<listener-class>com.idca.fsim.core.FsimListener</listener-class>
|
||||
<!-- Start fsim and loads config. -->
|
||||
</listener>
|
||||
<listener>
|
||||
<listener-class>com.idca.fsim.core.indexer.IndexerManagerListener</listener-class>
|
||||
<!-- Start fsim and loads config. -->
|
||||
</listener>
|
||||
|
||||
|
||||
<!--
|
||||
======================== SERVLETS ======================
|
||||
-->
|
||||
|
||||
|
||||
<servlet>
|
||||
<description>Fsim Search Servlet</description>
|
||||
<display-name>Fsim Search Servlet</display-name>
|
||||
<servlet-name>searchServlet</servlet-name>
|
||||
<servlet-class>com.idca.fsim.web.SearchServlet</servlet-class>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>searchServlet</servlet-name>
|
||||
<url-pattern>/search</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<description>Fsim Admin Servlet</description>
|
||||
<display-name>Fsim Admin Servlet</display-name>
|
||||
<servlet-name>adminServlet</servlet-name>
|
||||
<servlet-class>com.idca.fsim.web.AdminServlet</servlet-class>
|
||||
|
||||
<init-param>
|
||||
<description>
|
||||
When an hosts session is not an admin session then
|
||||
hosty is blocked, time is increased with this value in minutes.
|
||||
</description>
|
||||
<param-name>hostBlockedNoAdminPeneltyTime</param-name>
|
||||
<param-value>1</param-value>
|
||||
</init-param>
|
||||
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>adminServlet</servlet-name>
|
||||
<url-pattern>/admin</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<description>Fsim Redirect Servlet</description>
|
||||
<display-name>Fsim Redirect Servlet</display-name>
|
||||
<servlet-name>redirectServlet</servlet-name>
|
||||
<servlet-class>com.idca.fsim.web.RedirectServlet</servlet-class>
|
||||
|
||||
<init-param>
|
||||
<description>when click is done send to this url.</description>
|
||||
<param-name>pluginPageRedirectURL</param-name>
|
||||
<param-value>/ppage</param-value>
|
||||
</init-param>
|
||||
<init-param>
|
||||
<description>blocked time im mins when parameter(s) is wrong</description>
|
||||
<param-name>hostBlockedParameterPeneltyTime</param-name>
|
||||
<param-value>0</param-value>
|
||||
</init-param>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>redirectServlet</servlet-name>
|
||||
<url-pattern>/redirect</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
<servlet>
|
||||
<description>Fsim Plugin Page Servlet</description>
|
||||
<display-name>Fsim Plugin Page Servlet</display-name>
|
||||
<servlet-name>pluginPageServlet</servlet-name>
|
||||
<servlet-class>com.idca.fsim.web.PluginPageServlet</servlet-class>
|
||||
|
||||
<init-param>
|
||||
<description>blocked time im mins when parameter(s) is wrong</description>
|
||||
<param-name>hostBlockedParameterPeneltyTime</param-name>
|
||||
<param-value>0</param-value>
|
||||
</init-param>
|
||||
</servlet>
|
||||
<servlet-mapping>
|
||||
<servlet-name>pluginPageServlet</servlet-name>
|
||||
<url-pattern>/ppage</url-pattern>
|
||||
</servlet-mapping>
|
||||
|
||||
|
||||
<!--
|
||||
===================== FILTERS =================================
|
||||
-->
|
||||
<!--
|
||||
note: volgorde belangrijk !!
|
||||
aangezien servlet andere resources include bv !!
|
||||
en session of de aanwezig is !!
|
||||
|
||||
Na de SessionFilter is er altijd een session beschikbaar.
|
||||
|
||||
NU: request -> RequestLoggerFilter -> HostMonitoringFilter -> PagePathFilter -> SessionFilter -> AutenticationFilter -> RequestPerTimeFilter -> page(s)
|
||||
-->
|
||||
|
||||
<filter>
|
||||
<description>Manages user inlog/output</description>
|
||||
<filter-name>authenticationFilter</filter-name>
|
||||
<filter-class>com.idca.fsim.web.filters.AuthenticationFilter</filter-class>
|
||||
<init-param>
|
||||
<description>The page where a user comes when he logs out.</description>
|
||||
<param-name>logoutRedirectURL</param-name>
|
||||
<param-value>/search</param-value>
|
||||
</init-param>
|
||||
</filter>
|
||||
<filter-mapping>
|
||||
<filter-name>authenticationFilter</filter-name>
|
||||
<url-pattern>/*</url-pattern>
|
||||
</filter-mapping>
|
||||
|
||||
|
||||
</web-app>
|
54
WebRoot/css/fsim-layout-default.css
Normal file
|
@ -0,0 +1,54 @@
|
|||
/* ---- THIS STYLE SHEETS ONLY HANDLES STYLE CLASSES --- */
|
||||
|
||||
|
||||
|
||||
#top {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
#topLogo {
|
||||
float: left;
|
||||
width: 150px;
|
||||
height: 95%;
|
||||
}
|
||||
#topSearchBox {
|
||||
float: left;
|
||||
width: 450px;
|
||||
/*height: 95%;*/
|
||||
}
|
||||
|
||||
#topFsimLinks {
|
||||
float: right;
|
||||
width: 15%;
|
||||
height: 95%;
|
||||
}
|
||||
|
||||
#topBar {
|
||||
|
||||
}
|
||||
|
||||
#results {
|
||||
min-height: 100px;
|
||||
}
|
||||
|
||||
#bottomBar {
|
||||
}
|
||||
|
||||
#bottom {
|
||||
}
|
||||
|
||||
#fsimKeywordsPopup {
|
||||
position: absolute;
|
||||
width: 365px;
|
||||
left: 160px;
|
||||
top: 68px;
|
||||
visibility: hidden;
|
||||
z-index: 1;
|
||||
|
||||
/* strange it wont do the class ??? */
|
||||
font-size: 60%;
|
||||
border-style: solid;
|
||||
border-color: green;
|
||||
border-width: 2px;
|
||||
background-color:#C4D8FD;
|
||||
}
|
140
WebRoot/css/fsim-style-default.css
Normal file
|
@ -0,0 +1,140 @@
|
|||
/* ---- THIS STYLE SHEETS ONLY HANDLES STYLE CLASSES --- */
|
||||
|
||||
|
||||
* {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: arial,sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
/* nice border around site */
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
img {
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
/* makes div visable for devv */
|
||||
/*
|
||||
div,span {
|
||||
border: 1px solid #f00;
|
||||
margin: 1px;
|
||||
}
|
||||
*/
|
||||
|
||||
.top {
|
||||
|
||||
}
|
||||
|
||||
.topSearchBox {
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
.topOptions {
|
||||
font-size: 12pt;
|
||||
color: #aa6ea6;
|
||||
}
|
||||
|
||||
.topBar {
|
||||
background-color: #C4D8FD;
|
||||
|
||||
border-top-style: solid;
|
||||
border-top-width: 1px;
|
||||
border-top-color: #FE3061;
|
||||
|
||||
border-bottom-style:solid;
|
||||
border-bottom-width:1px;
|
||||
border-bottom-color:#B4C8DD;
|
||||
}
|
||||
|
||||
.topBarSearchStats {
|
||||
font-size: 90%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.topSearchBoxTitle {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.results {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
}
|
||||
|
||||
.resultsURL {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
.resultsKeywordHighLight {
|
||||
font-size: 120%;
|
||||
color: #FE3061;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.resultDetails {
|
||||
font-size: 70%;
|
||||
color: #018001;
|
||||
}
|
||||
|
||||
.bottomBar {
|
||||
background-color: #C4D8FD;
|
||||
|
||||
border-top-style: solid;
|
||||
border-top-width: 1px;
|
||||
border-top-color: #FE3061;
|
||||
|
||||
border-bottom-style:solid;
|
||||
border-bottom-width:1px;
|
||||
border-bottom-color:#FE3061;
|
||||
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.bottomBarPages {
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.bottomBarRender {
|
||||
font-size: 90%;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.bottom {
|
||||
}
|
||||
|
||||
.bottomCopy {
|
||||
font-size: 66%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
/* see the ID in layout this didn't work :? */
|
||||
.fsimKeywordsPopup {
|
||||
}
|
||||
|
||||
.fsimCompleteBinderNormal {
|
||||
/* height: 14px; */
|
||||
background-color: #C4D8FD;
|
||||
}
|
||||
.fsimCompleteBinderHighlight {
|
||||
/* height: 14px; */
|
||||
background-color: #FE3061;
|
||||
}
|
||||
|
||||
.fsimCompleteWords {
|
||||
width: 80%;
|
||||
font-size: 90%;
|
||||
/* float: left; */
|
||||
}
|
||||
|
||||
.fsimCompleteHits {
|
||||
/* float: right; */
|
||||
width: 15%;
|
||||
font-size: 10px;
|
||||
color: #018001;
|
||||
}
|
54
WebRoot/denied/host_blocked.jsp
Normal file
|
@ -0,0 +1,54 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>HOST BLOCKED</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1>HOST BLOCKED</h1>
|
||||
<hr/>
|
||||
<hr/>
|
||||
<br/>
|
||||
You IP: <c:out value="${param['ip']}"/> has been
|
||||
<c:if test="${param['perm'] == null}">
|
||||
<form>
|
||||
<span style="color:red">temperaly blocked.</span><br/>
|
||||
Time to unblock: <input type="textfield" name="time" disabled/> in ms.<br/>
|
||||
<br/>
|
||||
<br/>
|
||||
</form>
|
||||
</c:if>
|
||||
<c:if test="${param['perm'] != null}">
|
||||
You are <span style="color:red">permenent blocked.</span><br/>
|
||||
<br/>
|
||||
</c:if>
|
||||
Please consult the IDCA crew howto unblock if u think its not your fault.<br/>
|
||||
(Bring some cold drinks. ;-)<br/>
|
||||
<br/>
|
||||
<hr/>
|
||||
<hr/>
|
||||
<br/>
|
||||
Last reason: <c:out value="${param['reason']}"/>
|
||||
<br/>
|
||||
|
||||
<script type="text/javascript">
|
||||
var time = <c:out value="${param['time']}"/>+30000;
|
||||
var obj = document.forms[0].elements[0];
|
||||
var timeInterval = 1795;
|
||||
doTime();
|
||||
|
||||
function doTime()
|
||||
{
|
||||
time = time - timeInterval;
|
||||
if(time>0)
|
||||
{
|
||||
obj.value = time;
|
||||
setTimeout("doTime()",timeInterval);
|
||||
return;
|
||||
}
|
||||
window.location='/search';
|
||||
}
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
19
WebRoot/denied/max_sessions.jsp
Normal file
|
@ -0,0 +1,19 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Max users reached.</title>
|
||||
</head>
|
||||
<body>
|
||||
<br/>
|
||||
<hr/>
|
||||
<br/>
|
||||
Sorry, but our max concurrent users limit is rearched.<br/>
|
||||
<br/>
|
||||
Please try again in a 5 minutes.<br/>
|
||||
<br/>
|
||||
<hr/>
|
||||
<br/>
|
||||
</body>
|
||||
</html>
|
20
WebRoot/denied/real_error.jsp
Normal file
|
@ -0,0 +1,20 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Real error encountered.</title>
|
||||
</head>
|
||||
<body>
|
||||
<br/>
|
||||
<hr/>
|
||||
<br/>
|
||||
Sorry, but there was een error.<br/>
|
||||
<br/>
|
||||
Please try again.<br/>
|
||||
<a href="/search">FSIM</a>
|
||||
<br/>
|
||||
<hr/>
|
||||
<br/>
|
||||
</body>
|
||||
</html>
|
107
WebRoot/fragments/fsim_bottom.jsp
Normal file
|
@ -0,0 +1,107 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<!-- START BOTTOM -->
|
||||
</div>
|
||||
<div id="bottomBar" class="bottomBar">
|
||||
<c:if test="${drawPageResults == true}">
|
||||
<div class="bottomBarPages">
|
||||
<c:forEach var="page" items="${searchBean.pages}">
|
||||
<a href="<c:url value="/search">
|
||||
<c:param name="m" value="0"/>
|
||||
<c:param name="p" value="${page}"/>
|
||||
<c:param name="q" value="${searchBean.searchQuery}"/>
|
||||
</c:url>"><c:out value="${page}"/></a>
|
||||
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="bottomBarRender">
|
||||
<fmt:message key="fsim.bottombar.rendered" bundle="${fsim}"/>
|
||||
<c:out value="${renderTime}"/>
|
||||
<fmt:message key="fsim.bottombar.inms" bundle="${fsim}"/>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
|
||||
<div id="bottom" class="bottom">
|
||||
<div class="bottomCopy">
|
||||
<br/>
|
||||
FSIM: Is a pluggable DataBae search engine.<br/>
|
||||
Very customizable. To fit all needs.<br/>
|
||||
<br/>
|
||||
<fmt:message key="fsim.copyright" bundle="${fsim}"/>
|
||||
</div>
|
||||
</div>
|
||||
<div id="debug">
|
||||
</div>
|
||||
<div id="tech" class="tech">
|
||||
<a href="http://jigsaw.w3.org/css-validator/"
|
||||
title="<fmt:message key="fsim.tech.vcss.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="http://jigsaw.w3.org/css-validator/images/vcss"
|
||||
height="31"
|
||||
width="88"
|
||||
alt="<fmt:message key="fsim.tech.vcss.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href="http://validator.w3.org/check?uri=referer"
|
||||
title="<fmt:message key="fsim.tech.xhtml11.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="/images/tech/valid-xhtml11.png"
|
||||
height="31"
|
||||
width="88"
|
||||
alt="<fmt:message key="fsim.tech.xhtml11.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href="http://www.debian.org"
|
||||
title="<fmt:message key="fsim.tech.debian.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="/images/tech/debian.gif"
|
||||
alt="<fmt:message key="fsim.tech.debian.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href="http://sun.java.com"
|
||||
title="<fmt:message key="fsim.tech.java.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="/images/tech/duke.gif"
|
||||
height="60"
|
||||
width="60"
|
||||
alt="<fmt:message key="fsim.tech.java.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href="http://www.postgres.org"
|
||||
title="<fmt:message key="fsim.tech.postgres.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="/images/tech/postgres.gif"
|
||||
height="50"
|
||||
width="50"
|
||||
alt="<fmt:message key="fsim.tech.postgres.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href="http://www.kernel.org"
|
||||
title="<fmt:message key="fsim.tech.linux.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="/images/tech/tux.gif"
|
||||
height="60"
|
||||
width="60"
|
||||
alt="<fmt:message key="fsim.tech.linux.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<a href="http://jakarta.apache.org/tomcat/"
|
||||
title="<fmt:message key="fsim.tech.tomcat.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="/images/tech/tomcat.gif"
|
||||
height="50"
|
||||
width="60"
|
||||
alt="<fmt:message key="fsim.tech.tomcat.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
51
WebRoot/fragments/fsim_httphosts.jsp
Normal file
|
@ -0,0 +1,51 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<div class="fsimHttpHosts">
|
||||
<br/>
|
||||
<form action="/admin" method="POST">
|
||||
IP: <input type="textfield" name="host_address"/>
|
||||
Reason: <input type="textfield" name="host_reason"/>
|
||||
<input type="submit" name="host_add" value="add"/>
|
||||
<input type="hidden" name="m" value="1"/>
|
||||
</form>
|
||||
<br/>
|
||||
<table border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>IP</td>
|
||||
<td>startDate</td>
|
||||
<td>lastMessage</td>
|
||||
<td>blocked</td>
|
||||
<td>blockedTime</td>
|
||||
<td>lastRequest</td>
|
||||
<td>permenent</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="host" items="${httpHosts}">
|
||||
<tr>
|
||||
<td><c:out value="${host.hostAddress}"/>
|
||||
<form action="/admin" method="POST">
|
||||
<input type="submit" name="host_monitoring_remove" value="remove"/>
|
||||
<input type="hidden" name="m" value="1"/>
|
||||
<input type="hidden" name="host_address" value="<c:out value="${host.hostAddress}"/>"/>
|
||||
</form>
|
||||
</td>
|
||||
<td><c:out value="${host.monitoredStartDate}"/></td>
|
||||
<td><c:out value="${host.lastMessage}"/></td>
|
||||
<td><c:out value="${host.blocked}"/></td>
|
||||
<td><c:out value="${host.blockedTime}"/></td>
|
||||
<td><c:out value="${host.lastRequest}"/></td>
|
||||
<td><c:out value="${host.permenent}"/>
|
||||
<form action="/admin" method="POST">
|
||||
<input type="submit" name="host_permanent_add" value="set permanent"/>
|
||||
<input type="submit" name="host_permanent_remove" value="remove permanent"/>
|
||||
<input type="hidden" name="m" value="1"/>
|
||||
<input type="hidden" name="host_address" value="<c:out value="${host.hostAddress}"/>"/>
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
43
WebRoot/fragments/fsim_sessions.jsp
Normal file
|
@ -0,0 +1,43 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="com.idca.fsim.web.session.SearchBean" %>
|
||||
<%@ page import="java.util.Enumeration" %>
|
||||
<div class="fsimSessions">
|
||||
<table border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<td width="15%">SESSIONID</td>
|
||||
<td width="10%">created</td>
|
||||
<td width="10%">last access</td>
|
||||
<td>objects</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="session2" items="${sessions}">
|
||||
<tr>
|
||||
<td><c:out value="${session2.id}"/></td>
|
||||
<td><c:out value="${session2.creationTime}"/></td>
|
||||
<td><c:out value="${session2.lastAccessedTime}"/></td>
|
||||
<td>
|
||||
<%
|
||||
Enumeration sessionNames = session.getAttributeNames();
|
||||
while (sessionNames.hasMoreElements()) {
|
||||
String sessionName = (String)sessionNames.nextElement();
|
||||
String className = session.getAttribute( sessionName ).getClass().getName();
|
||||
out.println(sessionName+"("+className+")<br/>");
|
||||
|
||||
Object object = session.getAttribute(sessionName);
|
||||
if(object instanceof SearchBean)
|
||||
{
|
||||
SearchBean sb = (SearchBean)object;
|
||||
out.println("searched: "+sb.getSearchQuery()+"<br/>");
|
||||
}
|
||||
}
|
||||
|
||||
%>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
48
WebRoot/fragments/fsim_sources.jsp
Normal file
|
@ -0,0 +1,48 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<div class="fsimSessions">
|
||||
<table border="1">
|
||||
<thead>
|
||||
<tr>
|
||||
<td>name</td>
|
||||
<td>table</td>
|
||||
<td>search column</td>
|
||||
<td>last index</td>
|
||||
<td>hits</td>
|
||||
<td>last id</id>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="source" items="${sources}">
|
||||
<tr>
|
||||
<td>
|
||||
<c:out value="${source.name}"/>
|
||||
<form action="/admin" method="POST">
|
||||
<input type="submit" name="source_index" value="index"/>
|
||||
<input type="hidden" name="m" value="2"/>
|
||||
<input type="hidden" name="source_name" value="<c:out value="${source.name}"/>"/>
|
||||
</form>
|
||||
</td>
|
||||
<td><c:out value="${source.tableName}"/></td>
|
||||
<td><c:out value="${source.searchColumnName}"/></td>
|
||||
<td><c:out value="${source.lastIndexed}"/></td>
|
||||
<td><c:out value="${source.hitsSize}"/></td>
|
||||
<td><c:out value="${source.lastIndexedHitID}"/></td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
||||
<br/>
|
||||
<br/>
|
||||
Update path cache:
|
||||
<form action="/admin" method="POST">
|
||||
<input type="submit" name="path_update" value="path_update"/>
|
||||
<input type="hidden" name="m" value="2"/>
|
||||
</form>
|
||||
<br/>
|
||||
Dump wordLists info in log.
|
||||
<form action="/admin" method="POST">
|
||||
<input type="submit" name="wordlists_info" value="wordlists info"/>
|
||||
<input type="hidden" name="m" value="2"/>
|
||||
</form>
|
||||
</div>
|
137
WebRoot/fragments/fsim_top.jsp
Normal file
|
@ -0,0 +1,137 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="java.util.List" %>
|
||||
<%@ page import="java.util.Collection" %>
|
||||
<%@ page import="java.util.Iterator" %>
|
||||
<%@ page import="java.net.URLEncoder" %>
|
||||
<%@ page import="com.idca.fsim.core.plugins.SearchSource" %>
|
||||
<fmt:setBundle basename="com.idca.fsim.resources.i18n.fsim" var="fsim" scope="request"/>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title><fmt:message key="fsim.title" bundle="${fsim}"/></title>
|
||||
<script type="text/javascript"
|
||||
src="/js/fsim.js">
|
||||
</script>
|
||||
<link rel="stylesheet"
|
||||
type="text/css"
|
||||
href="/css/fsim-layout-default.css"
|
||||
media="all"
|
||||
/>
|
||||
<link rel="stylesheet"
|
||||
type="text/css"
|
||||
href="/css/fsim-style-default.css"
|
||||
media="screen"
|
||||
/>
|
||||
<meta http-equiv="Content-Type"
|
||||
content="text/html; charset=UTF-8"
|
||||
/>
|
||||
<meta name="pagename"
|
||||
content="FSIM: File Search Index Machine"
|
||||
/>
|
||||
<meta name="description"
|
||||
content="File Search Indexing Machine"
|
||||
/>
|
||||
<meta name="keywords"
|
||||
content="fsim,idca,search,searching,file,files,directory,path,browse,ftp"
|
||||
/>
|
||||
<meta name="robots"
|
||||
content="all"
|
||||
/>
|
||||
<meta name="author"
|
||||
content="http://www.idca.nl"
|
||||
/>
|
||||
</head>
|
||||
<body onload="javascript:createAutoComplete();">
|
||||
<div id="top">
|
||||
<form action="/search" method="POST">
|
||||
<div id="topLogo" class="toplogo">
|
||||
<a href="/search"
|
||||
title="<fmt:message key="fsim.logo.title" bundle="${fsim}"/>"
|
||||
>
|
||||
<img src="images/fsim.png"
|
||||
alt="<fmt:message key="fsim.logo.alt" bundle="${fsim}"/>"
|
||||
/>
|
||||
</a>
|
||||
</div>
|
||||
<c:if test="${drawSearch == true}">
|
||||
<div id="topSearchBox" class="topSearchBox">
|
||||
<div class="topSearchBoxTitle"><br/><fmt:message key="fsim.header.title" bundle="${fsim}"/></div>
|
||||
<div>
|
||||
<input name="q"
|
||||
id="q"
|
||||
size="35"
|
||||
autocomplete="off"
|
||||
type="text"
|
||||
value="<c:out value="${searchBean.searchQuery}"/>"/>
|
||||
|
||||
<input type="submit"
|
||||
value="<fmt:message key="fsim.search.button" bundle="${fsim}"/>"/>
|
||||
<div id="fsimKeywordsPopup"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div id="topFsimLinks" class="topFsimLinks">
|
||||
<br/>
|
||||
Beta version.<br/>
|
||||
<%
|
||||
//<c:forEach var="source" items="${searchSources}">
|
||||
Collection ss = (Collection)request.getAttribute("searchSources2");
|
||||
Iterator i = ss.iterator();
|
||||
while(i.hasNext())
|
||||
{
|
||||
request.setAttribute("source",i.next());
|
||||
|
||||
%>
|
||||
<input type="checkbox"
|
||||
name="<c:out value="${source.name}"/>"
|
||||
onchange="this.form.submit();"
|
||||
<%
|
||||
String sss = (String)session.getAttribute("searchSources");
|
||||
SearchSource ss1 = (SearchSource)request.getAttribute("source");
|
||||
System.out.println("ssss: "+sss+" sdfsdf: " + ss1.getName());
|
||||
if(sss.contains(ss1.getName())) {
|
||||
out.print(" checked=\"true\" ");
|
||||
}
|
||||
|
||||
%>
|
||||
/>
|
||||
<c:out value="${source.name}"/>
|
||||
<br/>
|
||||
<%
|
||||
|
||||
}
|
||||
//</c:forEach>
|
||||
%>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
|
||||
<c:if test="${admin == true}">
|
||||
Welcome admin user
|
||||
<a href="/admin?m=0">sessions</a> <a href="/admin?m=1">host monitoring</a> <a href="/admin?m=2">sources</a>
|
||||
<br/>
|
||||
</c:if>
|
||||
|
||||
<div id="topBar" class="topBar">
|
||||
<c:if test="${drawPageResults == true}">
|
||||
<div class="bottomBarPages">
|
||||
<c:forEach var="page" items="${searchBean.pages}">
|
||||
<a href="<c:url value="/search">
|
||||
<c:param name="m" value="0"/>
|
||||
<c:param name="p" value="${page}"/>
|
||||
<c:param name="q" value="${searchBean.searchQuery}"/>
|
||||
</c:url>"><c:out value="${page}"/></a>
|
||||
|
||||
</c:forEach>
|
||||
</div>
|
||||
<div class="topBarSearchStats"><fmt:message key="fsim.topbar.results" bundle="${fsim}"/>
|
||||
<c:out value='${resultSize}'/> <fmt:message key="fsim.topbar.resultsin" bundle="${fsim}"/>
|
||||
<c:out value='${searchTime}'/> <fmt:message key="fsim.topbar.inms" bundle="${fsim}"/>
|
||||
</div>
|
||||
</c:if>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div id="results">
|
||||
<br/>
|
||||
<!-- END TOP -->
|
4
WebRoot/fragments/searchers/files/file_mirrors.jsp
Normal file
|
@ -0,0 +1,4 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
|
||||
SEE MIRROR LIST
|
24
WebRoot/fragments/searchers/files/file_redirect.jsp
Normal file
|
@ -0,0 +1,24 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.File" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.Path" %>
|
||||
<%@ page import="java.net.URLEncoder" %>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<%
|
||||
File file = (File)session.getAttribute("model");
|
||||
String url = file.getPath().getPath()+"/"+file.getName();
|
||||
url = file.getPath().getHost().getProtocol()+file.getPath().getHost().getHostName()+url;//URLEncoder.encode(url, "UTF-8");
|
||||
request.setAttribute("url",url);
|
||||
%>
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<META http-equiv=Refresh Content="0;URL=<c:out value="${url}"/>"/>
|
||||
</head>
|
||||
<body>
|
||||
Going to path now.
|
||||
</body>
|
||||
</html>
|
||||
|
||||
|
||||
|
39
WebRoot/fragments/searchers/files/host_browse.jsp
Normal file
|
@ -0,0 +1,39 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="java.util.Collection" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.Host" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.FilesListener" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.PathManager" %>
|
||||
<%
|
||||
Collection hosts = FilesListener.getPathManager().getHosts();
|
||||
request.setAttribute("hosts",hosts);
|
||||
%>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<td></td>
|
||||
<td></td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<c:forEach var="host" items="${hosts}">
|
||||
<tr>
|
||||
<td>> <c:out value="${host.hostname}"/></td>
|
||||
<td>
|
||||
<span class="resultDetails">
|
||||
<%
|
||||
Host host = (Host)request.getAttribute("host");
|
||||
out.println(host.getRootPaths().size());
|
||||
%>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="resultDetails">
|
||||
<c:out value="${host.lastScanned}"/>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
</c:forEach>
|
||||
</tbody>
|
||||
</table>
|
19
WebRoot/fragments/searchers/files/host_redirect.jsp
Normal file
|
@ -0,0 +1,19 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.Host" %>
|
||||
<%@ page import="java.net.URLEncoder" %>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<%
|
||||
Host host = (Host)session.getAttribute("model");
|
||||
String url = host.getProtocol()+host.getHostName();
|
||||
//url = URLEncoder.encode(url, "UTF-8");
|
||||
request.setAttribute("url",url);
|
||||
%>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<META http-equiv=Refresh Content="0;URL=<c:out value="${url}"/>"/>
|
||||
</head>
|
||||
<body>
|
||||
Going to host now.
|
||||
</body>
|
||||
</html>
|
150
WebRoot/fragments/searchers/files/path_browse.jsp
Normal file
|
@ -0,0 +1,150 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="java.util.List" %>
|
||||
<%@ page import="java.util.Collection" %>
|
||||
<%@ page import="java.util.Iterator" %>
|
||||
<%@ page import="java.util.ArrayList" %>
|
||||
<%@ page import="java.net.URLEncoder" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.Host" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.File" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.Path" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.FilesListener" %>
|
||||
<%
|
||||
Object model = session.getAttribute("model");
|
||||
Path path = null;
|
||||
Host host = null;
|
||||
|
||||
Collection paths = null;
|
||||
List files = null;
|
||||
|
||||
if(model instanceof File)
|
||||
{
|
||||
File file = (File)model;
|
||||
path = file.getPath();
|
||||
paths = path.getChilderen();
|
||||
files = FilesListener.getPathManager().getFiles(path);
|
||||
}
|
||||
|
||||
if(model instanceof Path)
|
||||
{
|
||||
path = (Path)model;
|
||||
paths = path.getChilderen();
|
||||
files = FilesListener.getPathManager().getFiles(path);
|
||||
}
|
||||
if(model instanceof Host)
|
||||
{
|
||||
host = (Host)model;
|
||||
if (host.getRootPaths().iterator().hasNext()) {
|
||||
paths = ((Path)(host.getRootPaths().iterator().next())).getChilderen();
|
||||
files = FilesListener.getPathManager().getFiles(((Path)(host.getRootPaths().iterator().next())));
|
||||
} else {
|
||||
paths = new ArrayList();
|
||||
files = new ArrayList();
|
||||
}
|
||||
}
|
||||
|
||||
request.setAttribute("paths",paths);
|
||||
request.setAttribute("files",files);
|
||||
%>
|
||||
<table width="100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<td width="45%"></td>
|
||||
<td width="25%"></td>
|
||||
<td width="25%"></td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% if (path!=null && path.getParent()!=null) { %>
|
||||
<tr>
|
||||
<td><span class="resultDetails"><a href="<%
|
||||
out.write("ppage?ss="+request.getParameter("ss")+"&rid="+path.getParent().getID()+"&up=path_browse");
|
||||
%>">..</a></span></td>
|
||||
<td><span class="resultDetails"></span></td>
|
||||
<td><span class="resultDetails"></span></td>
|
||||
</tr>
|
||||
<% } %>
|
||||
|
||||
|
||||
|
||||
|
||||
<% if (host!=null) {
|
||||
%>
|
||||
<tr>
|
||||
<td><span class="resultDetails">/</span></td>
|
||||
<td><span class="resultDetails">(root)</span></td>
|
||||
<td><span class="resultDetails"></span></td>
|
||||
</tr>
|
||||
<% }
|
||||
|
||||
//<c:forEach var="path" items="${paths}">
|
||||
Iterator p = paths.iterator();
|
||||
while(p.hasNext())
|
||||
{
|
||||
Path pp = (Path)p.next();
|
||||
request.setAttribute("path",pp);
|
||||
%>
|
||||
<tr>
|
||||
<td>> <a href="<c:out value="${path.path}"/>"><c:out value="${path.path}"/></a></td>
|
||||
<td>
|
||||
<span class="resultDetails">
|
||||
<%
|
||||
Path path2 = (Path)request.getAttribute("path");
|
||||
//if(path2!=null) {
|
||||
out.println(path2.getChilderen().size());
|
||||
//} else {
|
||||
// out.println("path2 null");
|
||||
//}
|
||||
|
||||
|
||||
%>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="resultDetails">
|
||||
<c:out value="${path.host.lastScanned}"/>
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<% }
|
||||
|
||||
//</c:forEach
|
||||
//<c:forEach var="file" items="${files}">
|
||||
Iterator f = files.iterator();
|
||||
while(f.hasNext())
|
||||
{
|
||||
request.setAttribute("file",f.next());
|
||||
File file = (File)request.getAttribute("file");
|
||||
|
||||
|
||||
//redirect?ss="+hit.source.getName()+"&rid="+hit.id+"&up=path_browse"+"\">browse");
|
||||
|
||||
String url = "redirect/"+file.getPath()+file.getName();
|
||||
|
||||
url = file.getPath().getHost().getProtocol()+file.getPath().getHost().getHostName()+URLEncoder.encode(url, "UTF-8");
|
||||
|
||||
%>
|
||||
<tr>
|
||||
<td><span class="resultDetails"><a href="<%=url%>"><c:out value="${file.name}"/></a></span></td>
|
||||
<td><span class="resultDetails">
|
||||
<%
|
||||
//File file = (File)request.getAttribute("file");
|
||||
//if(file!=null) {
|
||||
out.println(File.printSize(file));
|
||||
//} else {
|
||||
// out.println("file is null");
|
||||
//}
|
||||
%>
|
||||
</span>
|
||||
</td>
|
||||
<td>
|
||||
<span class="resultDetails">
|
||||
</span>
|
||||
</td>
|
||||
</tr>
|
||||
<%
|
||||
}
|
||||
//</c:forEach>
|
||||
%>
|
||||
</tbody>
|
||||
</table>
|
22
WebRoot/fragments/searchers/files/path_redirect.jsp
Normal file
|
@ -0,0 +1,22 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.File" %>
|
||||
<%@ page import="com.idca.fsim.searchers.files.models.Path" %>
|
||||
<%@ page import="java.net.URLEncoder" %>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
<%
|
||||
Path path = (Path)session.getAttribute("model");
|
||||
String url = path.getPath();
|
||||
//url = URLEncoder.encode(url, "UTF-8");
|
||||
request.setAttribute("url",path.getHost().getProtocol()+path.getHost().getHostName()+url);
|
||||
//<jsp:useBean id="hit" class="com.idca.fsim.models.Hit" scope="session"/>
|
||||
//<jsp:useBean id="model" class="com.idca.fsim.searchers.files.models.Path" scope="session"/>
|
||||
%>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<META http-equiv=Refresh Content="0;URL=<c:out value="${url}"/>"/>
|
||||
</head>
|
||||
<body>
|
||||
Downloading file now.
|
||||
</body>
|
||||
</html>
|
BIN
WebRoot/images/fsim.png
Normal file
After Width: | Height: | Size: 6.9 KiB |
47
WebRoot/images/tech/.svn/all-wcprops
Normal file
|
@ -0,0 +1,47 @@
|
|||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 56
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech
|
||||
END
|
||||
duke.gif
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 65
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/duke.gif
|
||||
END
|
||||
vcss.png
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 65
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/vcss.png
|
||||
END
|
||||
tomcat.gif
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 67
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/tomcat.gif
|
||||
END
|
||||
debian.gif
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 67
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/debian.gif
|
||||
END
|
||||
tux.gif
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 64
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/tux.gif
|
||||
END
|
||||
valid-xhtml11.png
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 74
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/valid-xhtml11.png
|
||||
END
|
||||
postgres.gif
|
||||
K 25
|
||||
svn:wc:ra_dav:version-url
|
||||
V 69
|
||||
/svn/idca/!svn/ver/3/fsim/trunk/fsim/WebRoot/images/tech/postgres.gif
|
||||
END
|
266
WebRoot/images/tech/.svn/entries
Normal file
|
@ -0,0 +1,266 @@
|
|||
9
|
||||
|
||||
dir
|
||||
115
|
||||
https://decaid.idca.nl/svn/idca/fsim/trunk/fsim/WebRoot/images/tech
|
||||
https://decaid.idca.nl/svn/idca
|
||||
|
||||
|
||||
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
|
||||
|
||||
svn:special svn:externals svn:needs-lock
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
623d4b01-600f-0410-8ed7-89934cd2f745
|
||||
|
||||
debian.gif
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:40.000000Z
|
||||
8ff7f09386f6937371ff2e31e3bf5a7e
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
2596
|
||||
|
||||
duke.gif
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:40.000000Z
|
||||
70263cae8e43a375c7f260b6d731b7ce
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
6310
|
||||
|
||||
postgres.gif
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:40.000000Z
|
||||
3bdb0172fbc3e28067700488f4a8a1a0
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
9296
|
||||
|
||||
tomcat.gif
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:40.000000Z
|
||||
b8ebd781db53b856efa8e873fa4d2f6e
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1934
|
||||
|
||||
tux.gif
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:39.000000Z
|
||||
e5b3348e57a2212dfac480d21074fa4c
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
4972
|
||||
|
||||
valid-xhtml11.png
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:40.000000Z
|
||||
6b1146d15bc3a499567953020fd14204
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1917
|
||||
|
||||
vcss.png
|
||||
file
|
||||
|
||||
|
||||
|
||||
|
||||
2009-08-11T18:38:39.000000Z
|
||||
35986567c8c46ef7fe2fd6f769f8eab3
|
||||
2005-08-08T22:22:39.000000Z
|
||||
3
|
||||
willemc
|
||||
has-props
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1134
|
||||
|
1
WebRoot/images/tech/.svn/format
Normal file
|
@ -0,0 +1 @@
|
|||
9
|
5
WebRoot/images/tech/.svn/prop-base/debian.gif.svn-base
Normal file
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
5
WebRoot/images/tech/.svn/prop-base/duke.gif.svn-base
Normal file
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
5
WebRoot/images/tech/.svn/prop-base/postgres.gif.svn-base
Normal file
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
5
WebRoot/images/tech/.svn/prop-base/tomcat.gif.svn-base
Normal file
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
5
WebRoot/images/tech/.svn/prop-base/tux.gif.svn-base
Normal file
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
5
WebRoot/images/tech/.svn/prop-base/vcss.png.svn-base
Normal file
|
@ -0,0 +1,5 @@
|
|||
K 13
|
||||
svn:mime-type
|
||||
V 24
|
||||
application/octet-stream
|
||||
END
|
BIN
WebRoot/images/tech/.svn/text-base/debian.gif.svn-base
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
WebRoot/images/tech/.svn/text-base/duke.gif.svn-base
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
WebRoot/images/tech/.svn/text-base/postgres.gif.svn-base
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
WebRoot/images/tech/.svn/text-base/tomcat.gif.svn-base
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
WebRoot/images/tech/.svn/text-base/tux.gif.svn-base
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
WebRoot/images/tech/.svn/text-base/valid-xhtml11.png.svn-base
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
WebRoot/images/tech/.svn/text-base/vcss.png.svn-base
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
WebRoot/images/tech/debian.gif
Normal file
After Width: | Height: | Size: 2.5 KiB |
BIN
WebRoot/images/tech/duke.gif
Normal file
After Width: | Height: | Size: 6.2 KiB |
BIN
WebRoot/images/tech/postgres.gif
Normal file
After Width: | Height: | Size: 9.1 KiB |
BIN
WebRoot/images/tech/tomcat.gif
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
WebRoot/images/tech/tux.gif
Normal file
After Width: | Height: | Size: 4.9 KiB |
BIN
WebRoot/images/tech/valid-xhtml11.png
Normal file
After Width: | Height: | Size: 1.9 KiB |
BIN
WebRoot/images/tech/vcss.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
2
WebRoot/index.jsp
Normal file
|
@ -0,0 +1,2 @@
|
|||
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
||||
<c:redirect url="/search"/>
|
253
WebRoot/js/fsim.js
Normal file
|
@ -0,0 +1,253 @@
|
|||
|
||||
|
||||
//if(window.url.indexOf("divv")!=-1) {
|
||||
// alert("turning on divv devv mode");
|
||||
//div,span {
|
||||
//border: 1px solid #f00;
|
||||
//margin: 1px;
|
||||
//}
|
||||
//}
|
||||
|
||||
|
||||
var IE = document.all?true:false;
|
||||
var req = null;
|
||||
if (!IE) {
|
||||
document.captureEvents(Event.KEYBOARD);
|
||||
}
|
||||
|
||||
// full autocomplete off AND XHTML compatible
|
||||
for(i=0;i<document.forms.length;i++)void(document.forms[i].setAttribute('autocomplete', 'off'));
|
||||
|
||||
function debug(text) {
|
||||
|
||||
var divObject = document.getElementById('debug');
|
||||
divObject.innerHTML = divObject.innerHTML+text+'<br/>';
|
||||
|
||||
}
|
||||
|
||||
function initRequest() {
|
||||
if (window.XMLHttpRequest) {
|
||||
req = new XMLHttpRequest();
|
||||
} else if (window.ActiveXObject) {
|
||||
IE = true;
|
||||
req = new ActiveXObject("Microsoft.XMLHTTP");
|
||||
}
|
||||
}
|
||||
|
||||
function sendRequest(url,oDiv) {
|
||||
|
||||
if(req.readyState==1) {
|
||||
// not while loading.
|
||||
return;
|
||||
}
|
||||
|
||||
req.table = oDiv;
|
||||
req.onreadystatechange=callBack;
|
||||
req.open("GET",url,true);
|
||||
req.send(null);
|
||||
|
||||
}
|
||||
|
||||
function callBack()
|
||||
{
|
||||
// if xmlhttp shows "loaded"
|
||||
if(req && req.readyState==4)
|
||||
{
|
||||
// if "OK"
|
||||
if (req.status==200)
|
||||
{
|
||||
//alert("just got: "+xmlhttp.responseText);
|
||||
//document.write(xmlhttp.responseText);
|
||||
ac = req.table;
|
||||
oDiv = ac.oDiv;
|
||||
|
||||
// clear the popup div.
|
||||
while ( oDiv.hasChildNodes() )
|
||||
{
|
||||
oDiv.removeChild(oDiv.firstChild);
|
||||
}
|
||||
|
||||
var items = req.responseXML.getElementsByTagName("item");
|
||||
//alert("just got items:"+items);
|
||||
var to = "";
|
||||
for (loop = 0; loop < items.length; loop++)
|
||||
{
|
||||
var item = items.item(loop).firstChild.nodeValue;
|
||||
var hits = items.item(loop).getAttribute('hits');
|
||||
|
||||
var oDivBinder = document.createElement('div');
|
||||
oDivBinder.id = loop;
|
||||
oDivBinder.className = 'fsimCompleteBinderNormal';
|
||||
|
||||
var oDivItem = document.createElement('div');
|
||||
oDivItem.innerHTML = item;
|
||||
oDivItem.className = 'fsimCompleteWords';
|
||||
|
||||
oDivBinder.onmousedown = AutoComplete.prototype.onDivMouseDown;
|
||||
oDivBinder.onmouseover = AutoComplete.prototype.onDivMouseOver;
|
||||
oDivBinder.onmouseout = AutoComplete.prototype.onDivMouseOut;
|
||||
|
||||
//var oSpanHits = document.createElement('div');
|
||||
//oSpanHits.className = 'fsimCompleteHits';
|
||||
//oSpanHits.innerHTML = 'hits: '+hits;
|
||||
|
||||
oDivBinder.appendChild(oDivItem);
|
||||
//oDivBinder.appendChild(oSpanHits);
|
||||
|
||||
oDiv.AutoComplete = ac;
|
||||
oDiv.appendChild(oDivBinder);
|
||||
}
|
||||
//alert("got: "+to);
|
||||
oDiv.style.visibility = "visible";
|
||||
//oDiv.stlyeClass = "pop";
|
||||
oDiv.className = "pop";
|
||||
}
|
||||
else
|
||||
{
|
||||
alert("Problem retrieving XML data status:"+req.statusText);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function AutoComplete(url, oText, oDiv)
|
||||
{
|
||||
// initialize member variables
|
||||
this.oText = oText; // the text box
|
||||
this.oDiv = oDiv; // a hidden <div> for the popup auto-complete
|
||||
this.url=url;
|
||||
this.selectedItem = null;
|
||||
|
||||
this.preKeyword = "";
|
||||
|
||||
|
||||
initRequest();
|
||||
|
||||
//if(IE) {
|
||||
// turn of autocompletion in IE for this field !
|
||||
oText.autocomplete = 'off';
|
||||
//}
|
||||
|
||||
// attach handlers to the text-box
|
||||
oText.AutoComplete = this;
|
||||
oText.onkeyup = AutoComplete.prototype.onTextChange;
|
||||
oText.onblur = AutoComplete.prototype.onTextBlur;
|
||||
}
|
||||
|
||||
AutoComplete.prototype.onTextBlur = function()
|
||||
{
|
||||
this.AutoComplete.onblur();
|
||||
}
|
||||
|
||||
AutoComplete.prototype.onblur = function()
|
||||
{
|
||||
this.oDiv.style.visibility = "hidden";
|
||||
}
|
||||
|
||||
AutoComplete.prototype.onTextChange = function(e)
|
||||
{
|
||||
if(IE) {
|
||||
var e = window.event;
|
||||
}
|
||||
//debug('keycode='+e.keyCode);
|
||||
var keyCode = e.keyCode;
|
||||
|
||||
if(32 === keyCode) {
|
||||
this.AutoComplete.preKeyword = this.AutoComplete.oText.value;
|
||||
return;
|
||||
}
|
||||
|
||||
if(40 === keyCode || 38 === keyCode) {
|
||||
|
||||
if(this.AutoComplete.selectedItem !== null) {
|
||||
this.AutoComplete.selectedItem.className = "fsimCompleteBinderNormal";
|
||||
var currentID = this.AutoComplete.selectedItem.id;
|
||||
//debug("curID="+currentID);
|
||||
}
|
||||
var nextItem = null;
|
||||
if(40 === keyCode) {
|
||||
if(!currentID) {
|
||||
var currentID = -1;
|
||||
}
|
||||
currentID++;
|
||||
nextItem = this.AutoComplete.oDiv.childNodes.item(currentID);
|
||||
nextItem.className = "fsimCompleteBinderHighlight";
|
||||
this.AutoComplete.selectedItem = nextItem;
|
||||
|
||||
this.AutoComplete.oText.value = this.AutoComplete.preKeyword+nextItem.firstChild.innerHTML;
|
||||
|
||||
}
|
||||
if(38 === keyCode) {
|
||||
if(!currentID) {
|
||||
var currentID = this.AutoComplete.oDiv.childNodes.lenght+1;
|
||||
}
|
||||
currentID--;
|
||||
nextItem = this.AutoComplete.oDiv.childNodes.item(currentID);
|
||||
nextItem.className = "fsimCompleteBinderHighlight";
|
||||
this.AutoComplete.selectedItem = nextItem;
|
||||
|
||||
this.AutoComplete.oText.value = this.parentNode.AutoComplete.preKeyword+nextItem.firstChild.innerHTML;
|
||||
}
|
||||
|
||||
} else {
|
||||
this.AutoComplete.onchange();
|
||||
}
|
||||
}
|
||||
|
||||
AutoComplete.prototype.selectRange = function (iStart, iLength)
|
||||
{
|
||||
if (this.oText.createTextRange) {
|
||||
var oRange = this.oText.createTextRange();
|
||||
oRange.moveStart("character", iStart);
|
||||
oRange.moveEnd("character", iLength - this.textbox.value.length);
|
||||
oRange.select();
|
||||
} else if (this.oText.setSelectionRange) {
|
||||
this.oText.setSelectionRange(iStart, iLength);
|
||||
}
|
||||
|
||||
this.oText.focus();
|
||||
}
|
||||
|
||||
|
||||
AutoComplete.prototype.onchange = function()
|
||||
{
|
||||
var txt = this.oText.value;
|
||||
if(""!=txt) {
|
||||
this.selectedItem = null;
|
||||
sendRequest(this.url+txt,this);
|
||||
} else {
|
||||
// hide !
|
||||
this.oDiv.style.visibility = "hidden";
|
||||
this.oText.focus();
|
||||
}
|
||||
}
|
||||
|
||||
AutoComplete.prototype.onDivMouseDown = function()
|
||||
{
|
||||
this.parentNode.AutoComplete.oText.value = this.parentNode.AutoComplete.preKeyword+this.firstChild.innerHTML;
|
||||
this.parentNode.AutoComplete.selectedItem = null;
|
||||
}
|
||||
|
||||
AutoComplete.prototype.onDivMouseOver = function()
|
||||
{
|
||||
if(this.parentNode.AutoComplete.selectedItem !== null) {
|
||||
this.parentNode.AutoComplete.selectedItem.className = "fsimCompleteBinderNormal";
|
||||
}
|
||||
this.className = 'fsimCompleteBinderHighlight';
|
||||
this.parentNode.AutoComplete.selectedItem = this;
|
||||
|
||||
this.parentNode.AutoComplete.oText.value = this.parentNode.AutoComplete.preKeyword+this.firstChild.innerHTML;
|
||||
}
|
||||
|
||||
AutoComplete.prototype.onDivMouseOut = function()
|
||||
{
|
||||
this.className = 'fsimCompleteBinderNormal';
|
||||
}
|
||||
|
||||
|
||||
function createAutoComplete()
|
||||
{
|
||||
new AutoComplete('/search?m=1&l=',
|
||||
document.getElementById('q'),
|
||||
document.getElementById('fsimKeywordsPopup'));
|
||||
}
|
||||
|
6
doc/README.txt
Normal file
|
@ -0,0 +1,6 @@
|
|||
|
||||
== FSIM ==
|
||||
|
||||
The File Search Index Machine
|
||||
|
||||
TEST COMMIT
|
6
fsimcrawl/.buildpath
Normal file
|
@ -0,0 +1,6 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" path=""/>
|
||||
<classpathentry kind="con" path="org.trustudio.python.launching.PYTHON_CONTAINER"/>
|
||||
<classpathentry kind="output" path=""/>
|
||||
</classpath>
|
18
fsimcrawl/fsimcrawl.py
Normal file
|
@ -0,0 +1,18 @@
|
|||
#!/usr/bin/env python2.4
|
||||
"""
|
||||
fsimcrawl.py - a crawler for fsim
|
||||
|
||||
this file is really only the launcher for the crawler
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
from core import FsimCrawl
|
||||
|
||||
def startup():
|
||||
# here we start running fsimcrawl
|
||||
#FsimCrawl.FsimCrawl().start()
|
||||
pass
|
||||
|
||||
if __name__=="__main__":
|
||||
startup()
|
3
fsimcrawl/tests/__init__.py
Normal file
|
@ -0,0 +1,3 @@
|
|||
"""
|
||||
tests
|
||||
"""
|
460
fsimcrawl/tests/test_ftplib.py
Normal file
|
@ -0,0 +1,460 @@
|
|||
#!/usr/bin/env python2.4
|
||||
|
||||
import sys
|
||||
reload (sys) # enables the setencoding
|
||||
sys.setdefaultencoding('utf-8')
|
||||
import os
|
||||
import socket
|
||||
socket.setdefaulttimeout(3600)
|
||||
from ftplib import FTP
|
||||
import Queue
|
||||
import threading
|
||||
import time
|
||||
import gzip
|
||||
import cPickle
|
||||
|
||||
#from pyPgSQL import PgSQL
|
||||
import psycopg2
|
||||
|
||||
class FsimDBPathException(Exception): pass
|
||||
|
||||
class FsimDB(threading.Thread):
|
||||
def __init__(self, host, dbq):
|
||||
threading.Thread.__init__(self)
|
||||
self.host = host
|
||||
self.ip = socket.gethostbyname(host)
|
||||
self.dbq = dbq
|
||||
print time.strftime("%H:%M:%S"), "FsimDB: pgsql connect"
|
||||
self.db = psycopg2.connect("dbname=fsim user=fsim host=localhost password=fsim")
|
||||
self.db.set_isolation_level(0)
|
||||
print time.strftime("%H:%M:%S"), "FsimDB: pgsql cursor"
|
||||
self.curs = self.db.cursor()
|
||||
print time.strftime("%H:%M:%S"), "FsimDB: update host and spider"
|
||||
spiderid, hostid = self.updateHostAndSpider(self.host, self.ip)
|
||||
self.spiderid = spiderid
|
||||
self.hostid = hostid
|
||||
#self.findRootId()
|
||||
|
||||
self.curs.execute("COMMIT;")
|
||||
|
||||
self.__die = False
|
||||
self.running = True
|
||||
|
||||
self.curs.execute("COMMIT;")
|
||||
|
||||
|
||||
def die(self):
|
||||
self.__die = True
|
||||
|
||||
def shutdown(self):
|
||||
self.running = False
|
||||
|
||||
def cursor(self):
|
||||
return self.db.cursor()
|
||||
|
||||
def getHostId(self, host):
|
||||
self.curs.execute("SELECT id FROM host WHERE host = '%s'" % (host))
|
||||
retval = self.curs.fetchone()
|
||||
if not retval:
|
||||
return False
|
||||
return int(retval[0])
|
||||
|
||||
def insertSpider(self):
|
||||
self.curs.execute("INSERT INTO spider (udate) VALUES (now())")
|
||||
self.curs.execute("SELECT currval('spider_id_seq')")
|
||||
retval = self.curs.fetchone()
|
||||
if not retval:
|
||||
return False
|
||||
return int(retval[0])
|
||||
|
||||
def insertHost(self, hostname, ip, spiderid):
|
||||
query = "INSERT INTO host (hostname, host, insert_date, last_spider_id) VALUES"
|
||||
query += " ('%s', '%s', now(), %i)" % (hostname, ip, spiderid)
|
||||
print time.strftime("%H:%M:%S"), "inserting host"
|
||||
self.curs.execute(query)
|
||||
print time.strftime("%H:%M:%S"), "inserting done"
|
||||
|
||||
def updateHost(self, hostid, spiderid):
|
||||
query = "UPDATE host SET last_spider_id=%(spider_id)s WHERE id=%(host_id)s"
|
||||
self.curs.execute(query, dict(spider_id=spiderid, host_id=hostid))
|
||||
|
||||
def createRootDir(self,hostid):
|
||||
query = "INSERT INTO path (host_id, directory) VALUES (%(host_id)s,%(dir_id)s)"
|
||||
self.curs.execute(query, dict(host_id=hostid,dir_id="/"))
|
||||
|
||||
def updateHostAndSpider(self, hostname, ip):
|
||||
spiderid = self.insertSpider()
|
||||
print 'spiderid:', spiderid
|
||||
hostid = self.getHostId(hostname)
|
||||
if not hostid:
|
||||
print time.strftime("%H:%M:%S"), "insert host"
|
||||
self.insertHost(hostname, ip, spiderid)
|
||||
print time.strftime("%H:%M:%S"), "select host"
|
||||
hostid = self.getHostId(ip)
|
||||
print "got host:",hostid
|
||||
self.createRootDir(hostid)
|
||||
else:
|
||||
print time.strftime("%H:%M:%S"), "update host"
|
||||
self.updateHost(hostid, spiderid)
|
||||
return spiderid, hostid
|
||||
|
||||
def findRoot(self,path):
|
||||
path2 = "/".join(path)
|
||||
if not path2: path2="/"
|
||||
|
||||
try:
|
||||
path2 = path2.encode("utf-8","replace");
|
||||
except:
|
||||
return None;
|
||||
|
||||
query = "SELECT id FROM path WHERE host_id=%(host_id)s AND directory=%(dir)s"
|
||||
self.curs.execute(query, dict(host_id=self.hostid,dir=path2))
|
||||
rootid = self.curs.fetchone()
|
||||
if not rootid:
|
||||
raise FsimDBPathException, "Invalid path %s" % path2
|
||||
return rootid[0]
|
||||
|
||||
def updateDir(self,rootid,path2,name):
|
||||
|
||||
path = "/".join(path2)
|
||||
if name:
|
||||
path = path+"/"+name
|
||||
|
||||
if not path:
|
||||
path = "/"+name
|
||||
|
||||
try:
|
||||
path = path.encode('utf-8','replace');
|
||||
except:
|
||||
print "Encode error in directory: ",path;
|
||||
return;
|
||||
#path = path.encode('utf-8','ignore')
|
||||
|
||||
query = "Select id from path where host_id=%(host_id)s and directory=%(dir)s"
|
||||
self.curs.execute(query, dict(host_id=self.hostid,dir=path))
|
||||
result = self.curs.fetchone()
|
||||
if result: return
|
||||
|
||||
query = "INSERT INTO path (host_id, directory,parent_id) VALUES (%(host_id)s,%(dir)s,%(parent_id)s)"
|
||||
#print time.strftime("%H:%M:%S"), "updateDir SQL:",query
|
||||
self.curs.execute(query, dict(host_id=self.hostid,dir=path,parent_id=rootid))
|
||||
|
||||
def updateFile(self, rootid, name, size):
|
||||
#print time.strftime("%H:%M:%S"), "updateFile file:", rootid, name, size, "-"
|
||||
|
||||
try:
|
||||
name = name.encode('utf-8','replace');
|
||||
except:
|
||||
print "Encode error in name: ",name ;
|
||||
return;
|
||||
#name.encode('utf-8','ignore');
|
||||
|
||||
query = "select id from file where path_id=%(path_id)s and name=%(name)s and size=%(size)s";
|
||||
self.curs.execute(query, dict(path_id=rootid,name=name,size=long(size)));
|
||||
result = self.curs.fetchone();
|
||||
if result: return;
|
||||
|
||||
query = "INSERT INTO file (path_id, name, size, insert_date) VALUES (%(path_id)s, %(name)s, %(size)s, now())";
|
||||
self.curs.execute(query, dict(path_id=int(rootid),name=name,size=long(size)));
|
||||
query = "select id from file where name=%(name)s and size=%(size)s and path_id=%(path_id)s";
|
||||
self.curs.execute(query, dict(name=name,size=long(size),path_id=int(rootid)));
|
||||
new_file_id = self.curs.fetchone();
|
||||
|
||||
# Search for mirrors
|
||||
query = "select id from file where name=%(name)s and size=%(size)s and path_id!=%(path_id)s";
|
||||
self.curs.execute(query, dict(name=name,size=long(size),path_id=int(rootid)));
|
||||
mirror_id = self.curs.fetchone();
|
||||
if not mirror_id:
|
||||
# no same file found.. do nothing
|
||||
return;
|
||||
|
||||
# get the new id
|
||||
if not new_file_id:
|
||||
print "ERROR: no file id found of new file";
|
||||
|
||||
# test if we need to add ourself
|
||||
query = "select id from file_mirror where first_file_id=%(first_id)s";
|
||||
self.curs.execute(query, dict(first_id=int(mirror_id[0])) );
|
||||
result = self.curs.fetchone();
|
||||
if not result:
|
||||
print "Adding mirror record";
|
||||
query = "insert into file_mirror (file_id,first_file_id) values (%(file_id)s,%(first_id)s)";
|
||||
self.curs.execute(query, dict(file_id=int(mirror_id[0]),first_id=int(mirror_id[0])));
|
||||
query = "insert into file_mirror (file_id,first_file_id) values (%(file_id)s,%(first_id)s)";
|
||||
self.curs.execute(query, dict(file_id=int(new_file_id[0]),first_id=int(mirror_id[0])));
|
||||
return;
|
||||
|
||||
def process(self, hit):
|
||||
type, path, name, size = hit;
|
||||
#print time.strftime("%H:%M:%S"), "hit:",hit
|
||||
|
||||
rootid = self.findRoot(path);
|
||||
|
||||
if type=="DIR":
|
||||
# hit is directory
|
||||
self.updateDir(rootid,path,name);
|
||||
else:
|
||||
# hit is file
|
||||
rootid = self.findRoot(path);
|
||||
if not rootid: return;
|
||||
self.updateFile(rootid, name, size);
|
||||
|
||||
def runner(self):
|
||||
c=0
|
||||
while (not self.__die):
|
||||
hit = None
|
||||
try:
|
||||
hit = self.dbq.get(timeout=0.2)
|
||||
except Queue.Empty, e:
|
||||
# queue is empty
|
||||
#print time.strftime("%H:%M:%S"), "FsimDB: Queue empty waiting"
|
||||
if (not self.running or self.__die):
|
||||
# queue is empty and we are done running the crawl
|
||||
break
|
||||
else:
|
||||
self.process(hit)
|
||||
|
||||
if c<32:
|
||||
c+=1
|
||||
else:
|
||||
print time.strftime("%H:%M:%S"), "FsimDB:", self.dbq.qsize(), hit
|
||||
c=0
|
||||
#self.curs.execute("COMMIT;")
|
||||
|
||||
def run(self):
|
||||
print time.strftime("%H:%M:%S"), "FsimDB: run"
|
||||
try:
|
||||
self.runner()
|
||||
except KeyboardInterrupt, err:
|
||||
print time.strftime("%H:%M:%S"), "KeyboardInterrupt:", str(err)
|
||||
self.dbthread.die()
|
||||
self.curs.execute("COMMIT;")
|
||||
self.db.close()
|
||||
|
||||
class cpickle_test:
|
||||
def __init__(self, ip):
|
||||
self.ip = ip
|
||||
self.dbq = Queue.Queue()
|
||||
print "loading map"
|
||||
f = ((os.path.isfile(ip) and file(ip)) or gzip.open(ip+".pickle"))
|
||||
self.fmap = cPickle.load(f)
|
||||
self.dbthread = FsimDB(self.ip, self.dbq)
|
||||
|
||||
def crawl(self):
|
||||
c=0
|
||||
while (self.fmap):
|
||||
if (not self.dbthread.isAlive()):
|
||||
break
|
||||
path, lines = self.fmap.popitem()
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawler path: %s" % path
|
||||
pre, post = os.path.split(path)
|
||||
pre = pre.split("/")
|
||||
if not pre[0]=="":
|
||||
pre.insert(0, "")
|
||||
# FIXME: dirty hack to ensure all directories exists
|
||||
for i in range(len(pre)):
|
||||
self.dbq.put(["DIR", pre[:i], pre[i], 0])
|
||||
# insert directory
|
||||
self.dbq.put(["DIR", pre, post, 0])
|
||||
for line in lines:
|
||||
#print len(pathlines), path, line
|
||||
fullmode, links, owner, group, size, month, day, hour, name = line
|
||||
size = int(size)
|
||||
#isdir = fullmode[0]=='d'
|
||||
isdir = 0
|
||||
islink = fullmode[0]=='l'
|
||||
#mode = fullmode[1:]
|
||||
|
||||
if (c<256):
|
||||
c+=1
|
||||
else:
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawler:", len(self.fmap)
|
||||
c=0
|
||||
|
||||
if name=="." or name=="..":
|
||||
continue
|
||||
|
||||
#if (isdir):
|
||||
# # record directory and scanit
|
||||
# print time.strftime("%H:%M:%S"), "FsimCrawler path: %s/%s" % ("/".join(path), name)
|
||||
# self.dbq.put(["DIR", path, name, size])
|
||||
if (islink):
|
||||
# ignoring links FIXME later
|
||||
pass
|
||||
else:
|
||||
# is file
|
||||
#print time.strftime("%H:%M:%S"), "found file:", "/".join(path), name
|
||||
self.dbq.put(["FILE", pre+[post], name, size])
|
||||
|
||||
def run(self):
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawl: run"
|
||||
# start test
|
||||
self.dbthread.start()
|
||||
|
||||
try:
|
||||
self.crawl()
|
||||
except KeyboardInterrupt, err:
|
||||
self.dbthread.die()
|
||||
print time.strftime("%H:%M:%S"), "KeyboardInterrupt:", str(err)
|
||||
except Exception, e:
|
||||
self.dbthread.die()
|
||||
print time.strftime("%H:%M:%S"), "Exception:", e
|
||||
raise
|
||||
|
||||
# done scanning ftp
|
||||
print time.strftime("%H:%M:%S"), "calling dbthread shutdown"
|
||||
self.dbthread.shutdown()
|
||||
while (self.dbthread.isAlive()):
|
||||
print time.strftime("%H:%M:%S"), "waiting on db thread"
|
||||
try:
|
||||
time.sleep(5)
|
||||
except Exception, e:
|
||||
print time.strftime("%H:%M:%S"), "Exception:",e
|
||||
self.dbthread.die()
|
||||
|
||||
print time.strftime("%H:%M:%S"), "joining dbthread"
|
||||
self.dbthread.join(timeout=5)
|
||||
print time.strftime("%H:%M:%S"), "done"
|
||||
|
||||
class ftplib_test:
|
||||
def __init__(self, host):
|
||||
self.host = host
|
||||
self.dbq = Queue.Queue()
|
||||
|
||||
self.dbthread = FsimDB(self.host, self.dbq)
|
||||
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawl: ftp instance"
|
||||
self.ftp = FTP(host)
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawl: login"
|
||||
self.ftp.login()
|
||||
|
||||
def list_dir(self, path, dir):
|
||||
assert dir
|
||||
newpath = list(path)+list([dir])
|
||||
lines = []
|
||||
fulldir = '/'.join(newpath)
|
||||
self.ftp.cwd(fulldir)
|
||||
#self.ftp.retrlines("LIST %s" % fulldir, lines.append)
|
||||
self.ftp.retrlines("LIST", lines.append)
|
||||
if newpath==['/']:
|
||||
newpath=[""]
|
||||
return (newpath, lines)
|
||||
|
||||
def crawl(self):
|
||||
pathlines = []
|
||||
toscan = []
|
||||
pathlines.append(self.list_dir([], "/"))
|
||||
c = 0
|
||||
fc = 0
|
||||
while (pathlines):
|
||||
if not self.dbthread.isAlive():
|
||||
print time.strftime("%H:%M:%S"), "dbthread is dead ! exiting now!"
|
||||
break
|
||||
|
||||
|
||||
path, lines = pathlines.pop(0)
|
||||
for line in lines:
|
||||
#print len(pathlines), path, line
|
||||
try:
|
||||
fullmode, links, owner, group, size, rest = line.split(None, 5)
|
||||
except ValueError, e:
|
||||
if "total" in line: continue
|
||||
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawl: ftp error:", e
|
||||
print time.strftime("%H:%M:%S"), " in line:", line
|
||||
continue
|
||||
|
||||
try:
|
||||
size = int(size)
|
||||
except ValueError, e:
|
||||
# trying to include badly behaving ftp servers
|
||||
# that only have one field for ownership
|
||||
rest = size+" "+rest
|
||||
size = int(group)
|
||||
|
||||
isdir = fullmode[0]=='d'
|
||||
islink = fullmode[0]=='l'
|
||||
mode = fullmode[1:]
|
||||
date = rest[:12]
|
||||
name = rest[13:]
|
||||
|
||||
if (c<256):
|
||||
c+=1
|
||||
else:
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawler:", len(pathlines)
|
||||
c=0
|
||||
|
||||
if (fc<2048):
|
||||
fc+=1
|
||||
else:
|
||||
# make sure ftp doesn't timeout
|
||||
print time.strftime("%H:%M:%S"), "ftp anti-timeout"
|
||||
fc = 0
|
||||
self.ftp.cwd("/")
|
||||
|
||||
if name=="." or name=="..":
|
||||
continue
|
||||
|
||||
if (isdir):
|
||||
self.dbq.put(["DIR", path, name, size])
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawler scan: %s/%s" % ("/".join(path), name)
|
||||
try:
|
||||
toscan.append(self.list_dir(path, name))
|
||||
except:
|
||||
print "Dir List Error";
|
||||
elif (islink):
|
||||
# ignoring links FIXME later
|
||||
pass
|
||||
else:
|
||||
# is file
|
||||
self.dbq.put(["FILE", path, name, size])
|
||||
#endfor
|
||||
for todo in toscan:
|
||||
#print time.strftime("%H:%M:%S"), "FsimCrawler scan: %s/%s" % ("/".join(path), todo)
|
||||
#pathlines.append(self.list_dir(path, todo))
|
||||
pathlines.append(todo)
|
||||
toscan = []
|
||||
|
||||
def run(self):
|
||||
print time.strftime("%H:%M:%S"), "FsimCrawl: run"
|
||||
# start test
|
||||
self.dbthread.start()
|
||||
|
||||
try:
|
||||
self.crawl()
|
||||
except KeyboardInterrupt, err:
|
||||
self.dbthread.die()
|
||||
print time.strftime("%H:%M:%S"), "KeyboardInterrupt:", str(err)
|
||||
except Exception, e:
|
||||
self.dbthread.die()
|
||||
print time.strftime("%H:%M:%S"), "Exception:", e
|
||||
raise
|
||||
|
||||
# done scanning ftp
|
||||
print time.strftime("%H:%M:%S"), "calling dbthread shutdown"
|
||||
self.dbthread.shutdown()
|
||||
while (self.dbthread.isAlive()):
|
||||
print time.strftime("%H:%M:%S"), "waiting on db thread"
|
||||
try:
|
||||
time.sleep(5)
|
||||
except Exception, e:
|
||||
print time.strftime("%H:%M:%S"), "Exception:",e
|
||||
self.dbthread.die()
|
||||
|
||||
print time.strftime("%H:%M:%S"), "joining dbthread"
|
||||
self.dbthread.join(timeout=5)
|
||||
print time.strftime("%H:%M:%S"), "done"
|
||||
|
||||
if __name__=="__main__":
|
||||
# feed ip's only at this time
|
||||
if (len(sys.argv)!=3):
|
||||
print "usage: %s [crawl][file] ip_address" % sys.argv[0]
|
||||
sys.exit()
|
||||
if sys.argv[1]=="crawl":
|
||||
ftplib_test(str(sys.argv[2])).run()
|
||||
elif sys.argv[1]=="file":
|
||||
cpickle_test(str(sys.argv[2])).run()
|
||||
else:
|
||||
print "invalid command line."
|
||||
|
||||
|
114
src/com/idca/fsim/core/FsimContext.java
Normal file
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core;
|
||||
|
||||
import com.idca.fsim.core.jdbc.ConnectionFactory;
|
||||
import com.idca.fsim.core.plugins.SearchSource;
|
||||
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.Iterator;
|
||||
import java.util.Collection;
|
||||
import java.util.EventListener;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.SQLException;
|
||||
|
||||
|
||||
/**
|
||||
* An FsimContext
|
||||
*
|
||||
* Note: because we use here only the non-synchronized Collections
|
||||
* we must synchronize this objectes are stuctural changed (add/remove) !!
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class FsimContext
|
||||
{
|
||||
/** */
|
||||
private Logger logger = Logger.getLogger(FsimContext.class.getName());
|
||||
private Map searchSources = new HashMap();
|
||||
private List listeners = new ArrayList(1);
|
||||
private String name = null;
|
||||
|
||||
private Map jspIncludePages = new HashMap(3);
|
||||
|
||||
// ============ jspIncludePages
|
||||
|
||||
public void addJSPIncludePage(String name,String file)
|
||||
{
|
||||
synchronized(jspIncludePages)
|
||||
{
|
||||
jspIncludePages.put(name,file);
|
||||
}
|
||||
logger.info("Adding plugin page: "+name+" file: "+file);
|
||||
}
|
||||
public String getJSPIncludePage(String name)
|
||||
{
|
||||
return (String)jspIncludePages.get(name);
|
||||
}
|
||||
|
||||
// ============== the name of this search context.
|
||||
|
||||
public void setName(String name)
|
||||
{
|
||||
this.name = name;
|
||||
}
|
||||
public String getName()
|
||||
{
|
||||
return name;
|
||||
}
|
||||
|
||||
|
||||
// ================ listeners
|
||||
|
||||
public List getListeners()
|
||||
{
|
||||
return listeners;
|
||||
}
|
||||
|
||||
public void addListener(EventListener eventListener)
|
||||
{
|
||||
logger.info("Adding EventListener");
|
||||
synchronized(listeners)
|
||||
{
|
||||
listeners.add(eventListener);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ================= search sources
|
||||
|
||||
public Collection getSearchSources()
|
||||
{
|
||||
return searchSources.values();
|
||||
}
|
||||
public SearchSource getSearchSource(String name)
|
||||
{
|
||||
return (SearchSource)searchSources.get(name);
|
||||
}
|
||||
public void addSearchSource(SearchSource searchSource)
|
||||
{
|
||||
logger.info("Adding dataSearchSource: "+searchSource.getName());
|
||||
synchronized(searchSources)
|
||||
{
|
||||
searchSources.put(searchSource.getName(),searchSource);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ================== the db functions.
|
||||
|
||||
public Connection getConnectionByName(String dbName) throws SQLException
|
||||
{
|
||||
return ConnectionFactory.getConnection(dbName);
|
||||
}
|
||||
}
|
132
src/com/idca/fsim/core/FsimListener.java
Normal file
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core;
|
||||
|
||||
import com.idca.fsim.core.config.ConfigParser;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletContextEvent;
|
||||
import javax.servlet.ServletContextListener;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.logging.LogManager;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Starts fsim from a web context.
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 28/06/2005
|
||||
*/
|
||||
public class FsimListener implements ServletContextListener
|
||||
{
|
||||
/** */
|
||||
private Logger logger = Logger.getLogger(FsimListener.class.getName());
|
||||
|
||||
/**
|
||||
* This method is called when the servlet context is<br>
|
||||
* initialized(when the Web application is deployed). <br>
|
||||
* You can initialize servlet context related data here.<br>
|
||||
*/
|
||||
public void contextInitialized(ServletContextEvent event)
|
||||
{
|
||||
initLogging();
|
||||
|
||||
ServletContext sc = event.getServletContext();
|
||||
String file = sc.getRealPath(sc.getInitParameter("FSIM_CONFIG_FILE"));
|
||||
if(file==null)
|
||||
{
|
||||
logger.warning("No config file given!! giving up, set parameter: "+"FSIM_CONFIG_FILE");
|
||||
// return;
|
||||
}
|
||||
try {
|
||||
startFsim(file);
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.warning("Fsim could not be started: "+e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void initLogging()
|
||||
{
|
||||
|
||||
try {
|
||||
InputStream loggingProperties = null;
|
||||
String dev = "false"; //ApplicationSettings.getSetting("DEVELOPMENT");
|
||||
|
||||
if("true".equalsIgnoreCase(dev))
|
||||
{
|
||||
// 1st try to load the non-cvs properties
|
||||
try
|
||||
{
|
||||
loggingProperties = this.getClass().getResourceAsStream("/com/idca/fsim/resources/logging/logging-development.properties");
|
||||
} catch (Throwable overrideT) {
|
||||
}
|
||||
}
|
||||
// else the default properties
|
||||
if(loggingProperties==null)
|
||||
{
|
||||
loggingProperties = this.getClass().getResourceAsStream("/com/idca/fsim/resources/logging/logging.properties");
|
||||
logger.info("Loaded default logging properties");
|
||||
} else {
|
||||
logger.info("Loaded development logging properties");
|
||||
}
|
||||
|
||||
LogManager.getLogManager().readConfiguration( loggingProperties );
|
||||
loggingProperties.close();
|
||||
} catch (Throwable logT) {
|
||||
// PRINT AS STACKTRACE because when we fuck the logging there is no log message
|
||||
logT.printStackTrace();
|
||||
}
|
||||
//reinit logger for new levels
|
||||
logger = Logger.getLogger(this.getClass().getName());
|
||||
|
||||
checkLogLevels();
|
||||
}
|
||||
|
||||
private void checkLogLevels()
|
||||
{
|
||||
// TEST all log levels
|
||||
logger.info ("TESTING LOG LEVELS:\n");
|
||||
logger.finest ("LOGLEVEL ENABLED");
|
||||
logger.finer ("LOGLEVEL ENABLED");
|
||||
logger.fine ("LOGLEVEL ENABLED");
|
||||
logger.config ("LOGLEVEL ENABLED");
|
||||
logger.warning ("LOGLEVEL ENABLED");
|
||||
logger.info ("LOGLEVEL ENABLED\n");
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* This method is invoked when the Servlet Context.<br>
|
||||
* (the Web application) is undeployed or <br>
|
||||
* the J2EE Server shuts down.<br>
|
||||
*/
|
||||
public void contextDestroyed(ServletContextEvent event)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
private void startFsim(String fileName)
|
||||
{
|
||||
try {
|
||||
FsimContext fc = ConfigParser.parse(fileName);
|
||||
FsimServer.addFsimContext(fc);
|
||||
} catch (Exception e) {
|
||||
logger.warning("Error while loading: "+fileName+" message: "+e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
logger.info("done starting fsim");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
60
src/com/idca/fsim/core/FsimServer.java
Normal file
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core;
|
||||
|
||||
import com.idca.fsim.core.plugins.SearchSource;
|
||||
import com.idca.fsim.core.plugins.listeners.FsimContextListener;
|
||||
import com.idca.fsim.core.plugins.listeners.FsimContextEvent;
|
||||
|
||||
import java.util.Hashtable;
|
||||
import java.util.Collection;
|
||||
import java.util.Iterator;
|
||||
|
||||
/**
|
||||
* Manages the different Fsim contexts
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 20/07/2005
|
||||
*/
|
||||
public class FsimServer
|
||||
{
|
||||
static private Hashtable contexts = new Hashtable(1);
|
||||
|
||||
static public void addFsimContext(FsimContext fsimContext)
|
||||
{
|
||||
if(contexts.get(fsimContext.getName())!=null)
|
||||
{
|
||||
System.out.println("Can't add an FsimContext with an already loaded name: "+fsimContext.getName());
|
||||
return;
|
||||
}
|
||||
contexts.put(fsimContext.getName(),fsimContext);
|
||||
|
||||
// send events
|
||||
System.out.println("sending events of "+fsimContext.getName());
|
||||
Iterator i = fsimContext.getListeners().iterator();
|
||||
while(i.hasNext())
|
||||
{
|
||||
Object object = i.next();
|
||||
System.out.println("Object == "+object);
|
||||
if(object instanceof FsimContextListener)
|
||||
{
|
||||
FsimContextListener fcl = (FsimContextListener)object;
|
||||
fcl.contextInitialized(new FsimContextEvent(fsimContext));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static public FsimContext getFsimContext(String name) {
|
||||
if(name==null) {
|
||||
return null;
|
||||
}
|
||||
return (FsimContext)contexts.get(name);
|
||||
}
|
||||
|
||||
static public Collection getFsimContexts() {
|
||||
return contexts.values();
|
||||
}
|
||||
}
|
55
src/com/idca/fsim/core/LetterMap.java
Normal file
|
@ -0,0 +1,55 @@
|
|||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core;
|
||||
|
||||
import com.idca.fsim.models.Word;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
import java.util.Hashtable;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* An LetterMAp
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class LetterMap
|
||||
{
|
||||
/** */
|
||||
private Map wordSets = new Hashtable(240);
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ch
|
||||
* @param word
|
||||
*/
|
||||
public synchronized void addWord(Character ch,Word word)
|
||||
{
|
||||
Collection words = (Collection)wordSets.get(ch);
|
||||
if(words==null) {
|
||||
words = new HashSet();
|
||||
wordSets.put(ch,words);
|
||||
}
|
||||
words.add(word);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* @param ch
|
||||
* @return
|
||||
*/
|
||||
public Collection getWords(Character ch)
|
||||
{
|
||||
return (Collection)wordSets.get(ch);
|
||||
}
|
||||
|
||||
protected Map getWordSet()
|
||||
{
|
||||
return wordSets;
|
||||
}
|
||||
}
|
114
src/com/idca/fsim/core/Searcher.java
Normal file
|
@ -0,0 +1,114 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core;
|
||||
|
||||
import com.idca.fsim.core.comparators.WordListComparator;
|
||||
import com.idca.fsim.core.comparators.WordComparator;
|
||||
import com.idca.fsim.models.*;
|
||||
|
||||
import java.util.logging.Logger;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
|
||||
import javax.servlet.ServletException;
|
||||
|
||||
/**
|
||||
* Searches
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 Jan 22, 2006
|
||||
*/
|
||||
public class Searcher
|
||||
{
|
||||
private WordLists wl = null;
|
||||
private Logger logger = Logger.getLogger(Searcher.class.getName());
|
||||
private ArrayList searchSources = new ArrayList(3);
|
||||
|
||||
public Searcher(WordLists wl)
|
||||
{
|
||||
this.wl=wl;
|
||||
}
|
||||
|
||||
public Collection searchWords(String word,boolean inWord)
|
||||
{
|
||||
String[] keyWords = word.split(" ");
|
||||
|
||||
|
||||
|
||||
|
||||
//List result = null;
|
||||
List last = new ArrayList(19);
|
||||
for(int i=0;i<keyWords.length;i++)
|
||||
{
|
||||
String text = keyWords[i];
|
||||
//System.out.println("Doing "+text);
|
||||
List words = wl.getWords(text,inWord,false,false);
|
||||
//System.out.println("Searcher Doing "+text+" got "+words.size());
|
||||
Iterator a = words.iterator();
|
||||
while(a.hasNext())
|
||||
{
|
||||
Word w = (Word)a.next();
|
||||
//System.out.println("word = "+w.text);
|
||||
}
|
||||
|
||||
last.addAll(words);
|
||||
}
|
||||
logger.info("Searched for word: >> "+word+" << found "+last.size()+" results.");
|
||||
|
||||
// sort on hist list size and Keywords
|
||||
WordComparator wc =new WordComparator();
|
||||
wc.setKeywords(keyWords);
|
||||
Collections.sort(last,wc);
|
||||
|
||||
// Collections.sort(last,new WordClickedComperator());
|
||||
return last;
|
||||
}
|
||||
|
||||
public Collection searchHits(String text,boolean inWord)
|
||||
{
|
||||
Collection last = searchWords(text,inWord);
|
||||
|
||||
ArrayList hists = new ArrayList(100);
|
||||
Iterator x = last.iterator();
|
||||
while(x.hasNext()) {
|
||||
Word word = (Word)x.next();
|
||||
hists.addAll(word.hits);
|
||||
}
|
||||
|
||||
return hists;
|
||||
}
|
||||
|
||||
public void setSearchSources(String searchSources)
|
||||
{
|
||||
addSearchSources(this.searchSources,searchSources);
|
||||
}
|
||||
|
||||
public boolean hasSearchSource(String searchSource)
|
||||
{
|
||||
if(searchSources.contains(searchSource)) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void addSearchSources(List list,String sources)
|
||||
{
|
||||
String[] pathsA=sources.split(";");
|
||||
for(int i=0;i<pathsA.length;i++)
|
||||
{
|
||||
String path = pathsA[i];
|
||||
list.add(path);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
220
src/com/idca/fsim/core/WordLists.java
Normal file
|
@ -0,0 +1,220 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core;
|
||||
|
||||
import com.idca.fsim.core.comparators.WordListComparator;
|
||||
import com.idca.fsim.models.Word;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map;
|
||||
import java.util.Hashtable;
|
||||
import java.util.List;
|
||||
import java.util.HashSet;
|
||||
import java.util.Collection;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* An Words list
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class WordLists
|
||||
{
|
||||
private Map letters = new Hashtable(140);
|
||||
private Logger logger = Logger.getLogger(WordLists.class.getName());
|
||||
|
||||
/**
|
||||
*
|
||||
* @param word
|
||||
*/
|
||||
public void put(Word word)
|
||||
{
|
||||
int wordLength = word.text.length();
|
||||
for(int i=0;i<wordLength-1;i++)
|
||||
{
|
||||
Character ch1 = new Character(word.text.charAt(i));
|
||||
Character ch2 = new Character(word.text.charAt(i+1));
|
||||
|
||||
LetterMap letterMap = (LetterMap)letters.get(ch1);
|
||||
if(letterMap==null) {
|
||||
letterMap = new LetterMap();
|
||||
synchronized(letters)
|
||||
{
|
||||
letters.put(ch1,letterMap);
|
||||
}
|
||||
}
|
||||
synchronized(letterMap)
|
||||
{
|
||||
letterMap.addWord(ch2,word);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* THis methode returns a Collection of all matching text
|
||||
* like: 'text' => te+ex+xt = returned.
|
||||
* @param text
|
||||
* @return
|
||||
*/
|
||||
public Collection getWords(String text)
|
||||
{
|
||||
//logger.info("Starting search on "+text);
|
||||
// no spaces should be in text
|
||||
int textLength = text.length();
|
||||
List allWords = new ArrayList(6);
|
||||
for(int i=0;i<textLength-1;i++)
|
||||
{
|
||||
Character ch1 = new Character(text.charAt(i));
|
||||
Character ch2 = new Character(text.charAt(i+1));
|
||||
|
||||
LetterMap letterMap = (LetterMap)letters.get(ch1);
|
||||
Collection words = null;
|
||||
if(letterMap!=null) {
|
||||
words = letterMap.getWords(ch2);
|
||||
}
|
||||
|
||||
if(words==null) {
|
||||
//System.err.println("letterpair could not be found: '"+ch1+ch2+"'");
|
||||
continue;
|
||||
}
|
||||
// filter out double letterpairs
|
||||
if(!allWords.contains(words)) {
|
||||
allWords.add(words);
|
||||
}
|
||||
}
|
||||
// sort on list size
|
||||
Collections.sort(allWords,new WordListComparator());
|
||||
|
||||
Collection result = null;
|
||||
Iterator i = allWords.iterator();
|
||||
while(i.hasNext())
|
||||
{
|
||||
Collection list = (Collection)i.next();
|
||||
if(result==null) {
|
||||
//System.out.println("Starting with=null list="+list.size());
|
||||
result = new HashSet(list);
|
||||
} else {
|
||||
//System.out.println("retrain with="+result.size()+" list="+list.size());
|
||||
result.retainAll(list);
|
||||
}
|
||||
if(result.size()==0) {
|
||||
// not contineu if we didn't found anything.
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(result==null) {
|
||||
result = new ArrayList(0);
|
||||
}
|
||||
|
||||
//logger.info("returning result size: "+result.size());
|
||||
return result;
|
||||
}
|
||||
/**
|
||||
*
|
||||
* @param text should not contain spaces !!
|
||||
* @param inWord if false word should startWith text
|
||||
* @param matchCase upper/lower case matching
|
||||
* @param exactMatch then text equals word.text
|
||||
* @return
|
||||
*/
|
||||
public List getWords(String text,boolean inWord,boolean matchCase,boolean exactMatch)
|
||||
{
|
||||
List result = new ArrayList(10);
|
||||
Collection words = getWords(text);
|
||||
Iterator i = words.iterator();
|
||||
|
||||
if(!matchCase) {
|
||||
text = text.toLowerCase();
|
||||
}
|
||||
|
||||
while(i.hasNext())
|
||||
{
|
||||
Word word = (Word)i.next();
|
||||
|
||||
String wordText = word.text;
|
||||
if(!matchCase) {
|
||||
wordText = word.text.toLowerCase();
|
||||
}
|
||||
//System.out.println("=========search="+wordText+" list="+text);
|
||||
|
||||
// think twice this is reversed code !!
|
||||
boolean found = true;
|
||||
int index = wordText.indexOf(text);
|
||||
if(!inWord) {
|
||||
// if is other the start pos them next word/
|
||||
if(index!=0) {
|
||||
found = false;
|
||||
}
|
||||
} else {
|
||||
if(index==-1) {
|
||||
found = false;
|
||||
}
|
||||
}
|
||||
if(found && exactMatch && !wordText.equals(text)) {
|
||||
found = false;
|
||||
}
|
||||
|
||||
if(found) {
|
||||
result.add(word);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
public Word getWord(String text)
|
||||
{
|
||||
List col = getWords(text,false,true,true);
|
||||
if(col.size()==1) {
|
||||
return (Word)col.get(0);
|
||||
}
|
||||
if(col.size()==0) {
|
||||
// not found word.
|
||||
return null;
|
||||
}
|
||||
logger.warning("list is bigger than one should not happen: collection size: "+col.size()+" word="+text);
|
||||
|
||||
Iterator i = col.iterator();
|
||||
while(i.hasNext()) {
|
||||
|
||||
Word word = (Word)i.next();
|
||||
System.out.println(" word == "+word.text);
|
||||
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public LetterMap getLetterMap(Character ch)
|
||||
{
|
||||
return (LetterMap)letters.get(ch);
|
||||
}
|
||||
|
||||
public String dumpInfo()
|
||||
{
|
||||
Iterator keys = letters.keySet().iterator();
|
||||
while(keys.hasNext())
|
||||
{
|
||||
Object key1 = keys.next();
|
||||
LetterMap letterMap =(LetterMap)letters.get(key1);
|
||||
|
||||
Iterator letters2 = letterMap.getWordSet().keySet().iterator();
|
||||
while(letters2.hasNext())
|
||||
{
|
||||
Object key2 = letters2.next();
|
||||
Collection list2 = (Collection)letterMap.getWordSet().get(key2);
|
||||
System.out.println("Letter: "+key1+key2+" words: "+list2.size());
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
36
src/com/idca/fsim/core/comparators/HitComperator.java
Normal file
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.comparators;
|
||||
|
||||
import com.idca.fsim.models.Hit;
|
||||
import java.util.Comparator;
|
||||
|
||||
/**
|
||||
* compares 2 Hits.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class HitComperator implements Comparator
|
||||
{
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int compare(Object o1,Object o2)
|
||||
{
|
||||
Hit hit1 = (Hit)o1;
|
||||
Hit hit2 = (Hit)o2;
|
||||
|
||||
if(hit1.id==hit2.id)
|
||||
{
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.comparators;
|
||||
|
||||
import com.idca.fsim.models.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Compare words for there click rate.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class WordClickedComparator implements Comparator
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int compare(Object object1,Object object2) throws ClassCastException
|
||||
{
|
||||
Word word1 = (Word)object1;
|
||||
Word word2 = (Word)object2;
|
||||
|
||||
if(word1.clicked>word2.clicked)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if(word1.clicked<word2.clicked)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
66
src/com/idca/fsim/core/comparators/WordComparator.java
Normal file
|
@ -0,0 +1,66 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.comparators;
|
||||
|
||||
import com.idca.fsim.models.*;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Compare 2 Words.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class WordComparator implements Comparator
|
||||
{
|
||||
private String[] keyWords = null;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int compare(Object object1,Object object2) throws ClassCastException
|
||||
{
|
||||
Word word1 = (Word)object1;
|
||||
Word word2 = (Word)object2;
|
||||
|
||||
if(keyWords==null) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int w1b = 0;
|
||||
int w2b = 0;
|
||||
|
||||
// check for keywords.
|
||||
for(int i=0;i<keyWords.length;i++)
|
||||
{
|
||||
String text = keyWords[i].toLowerCase();
|
||||
if(text.indexOf(word1.text.toLowerCase())!=-1) {
|
||||
w1b++;
|
||||
}
|
||||
if(text.indexOf(word2.text.toLowerCase())!=-1) {
|
||||
w2b++;
|
||||
}
|
||||
}
|
||||
System.out.println("w1b=="+word1.text+" :"+w1b+" w2b=="+word2.text+":"+w2b);
|
||||
|
||||
if(w1b>w2b)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
if(w1b<w2b)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
public void setKeywords(String[] keyWords)
|
||||
{
|
||||
this.keyWords=keyWords;
|
||||
}
|
||||
}
|
33
src/com/idca/fsim/core/comparators/WordListComparator.java
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.comparators;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* Compares WordLists on its size.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0
|
||||
*/
|
||||
public class WordListComparator implements Comparator
|
||||
{
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public int compare(Object object1,Object object2) throws ClassCastException
|
||||
{
|
||||
Collection list1 = (Collection)object1;
|
||||
Collection list2 = (Collection)object2;
|
||||
|
||||
Integer size1 = new Integer(list1.size());
|
||||
Integer size2 = new Integer(list2.size());
|
||||
|
||||
return size1.compareTo(size2);
|
||||
}
|
||||
}
|
70
src/com/idca/fsim/core/config/ConfigParser.java
Normal file
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* Created on jul 16, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.config;
|
||||
|
||||
import com.idca.fsim.core.FsimContext;
|
||||
|
||||
import com.mbuyu.foei.xml.XMLDebugTagHandler;
|
||||
import com.mbuyu.foei.xml.XMLHandler;
|
||||
|
||||
import javax.xml.parsers.SAXParser;
|
||||
import javax.xml.parsers.SAXParserFactory;
|
||||
import javax.xml.parsers.ParserConfigurationException;
|
||||
import org.xml.sax.SAXException;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* Parseres fsim config xml syntax from an source.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 16/07/2005
|
||||
*/
|
||||
public class ConfigParser
|
||||
{
|
||||
|
||||
/**
|
||||
* Opens this file and parse it xml fsim config syntaxS
|
||||
* @param fileName
|
||||
* @throws ParserConfigurationException
|
||||
* @throws SAXException
|
||||
* @throws IOException
|
||||
*/
|
||||
static public FsimContext parse(String fileName) throws ParserConfigurationException,SAXException,IOException
|
||||
{
|
||||
return parse(new FileInputStream(fileName));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Parse this xml stream as an fsim config syntax.
|
||||
* @param inputStream
|
||||
* @throws ParserConfigurationException
|
||||
* @throws SAXException
|
||||
* @throws IOException
|
||||
*/
|
||||
static public FsimContext parse(InputStream inputStream) throws ParserConfigurationException,SAXException,IOException
|
||||
{
|
||||
FsimContext fc = new FsimContext();
|
||||
XMLHandler handler = new XMLHandler();
|
||||
handler.addXMLHandler(new XMLDebugTagHandler());
|
||||
handler.addXMLHandler(new FsimConfigTagHandler(fc));
|
||||
//handler.addXMLHandler(new BundleTagHandler(fc));
|
||||
handler.addXMLHandler(new JSPIncludePageTagHandler(fc));
|
||||
//handler.addXMLHandler(new DataBaseTagHandler(fc));
|
||||
handler.addXMLHandler(new SearchSourceTagHandler(fc));
|
||||
handler.addXMLHandler(new ListenerTagHandler(fc));
|
||||
|
||||
SAXParserFactory factory = SAXParserFactory.newInstance();
|
||||
factory.setNamespaceAware(true);
|
||||
SAXParser saxParser = factory.newSAXParser();
|
||||
saxParser.parse(inputStream,handler);
|
||||
return fc;
|
||||
}
|
||||
}
|
45
src/com/idca/fsim/core/config/FsimConfigTagHandler.java
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Created on jul 20, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.config;
|
||||
|
||||
import com.idca.fsim.core.FsimContext;
|
||||
import com.mbuyu.foei.xml.AbstractXMLTagHandler;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* Handles the Tags of the config.
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 20/07/2005
|
||||
*/
|
||||
public class FsimConfigTagHandler extends AbstractXMLTagHandler
|
||||
{
|
||||
/** */
|
||||
private FsimContext fc = null;
|
||||
|
||||
public FsimConfigTagHandler(FsimContext fc)
|
||||
{
|
||||
this.fc=fc;
|
||||
setTag("fsimConfig");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void startElement(String nameSpace,String tag,Attributes attributes) throws SAXException
|
||||
{
|
||||
if(getTag().equals(tag))
|
||||
{
|
||||
String name = attributes.getValue("name");
|
||||
//System.out.println("Setting name: "+name);
|
||||
fc.setName(name);
|
||||
}
|
||||
}
|
||||
}
|
45
src/com/idca/fsim/core/config/JSPIncludePageTagHandler.java
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* Created on jul 23, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.config;
|
||||
|
||||
import com.idca.fsim.core.FsimContext;
|
||||
import com.mbuyu.foei.xml.AbstractXMLTagHandler;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* The plugin pages
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 23/07/2005
|
||||
*/
|
||||
public class JSPIncludePageTagHandler extends AbstractXMLTagHandler
|
||||
{
|
||||
/** */
|
||||
private FsimContext fc = null;
|
||||
|
||||
public JSPIncludePageTagHandler(FsimContext fc)
|
||||
{
|
||||
this.fc=fc;
|
||||
setTag("pluginPage");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void startElement(String nameSpace,String tag,Attributes attributes) throws SAXException
|
||||
{
|
||||
if(getTag().equals(tag))
|
||||
{
|
||||
String name = attributes.getValue("name");
|
||||
String file = attributes.getValue("file");
|
||||
fc.addJSPIncludePage(name,file);
|
||||
}
|
||||
}
|
||||
}
|
64
src/com/idca/fsim/core/config/ListenerTagHandler.java
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*
|
||||
* Created on jul 20, 2005
|
||||
*
|
||||
* Copyright 2004 IDCA. All rights reserved.
|
||||
* IDCA PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
|
||||
*/
|
||||
|
||||
package com.idca.fsim.core.config;
|
||||
|
||||
import com.idca.fsim.core.FsimContext;
|
||||
import com.mbuyu.foei.xml.AbstractXMLTagHandler;
|
||||
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import java.util.EventListener;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* The Fsim Listeners
|
||||
*
|
||||
* @author Willem Cazander
|
||||
* @version 1.0 20/07/2005
|
||||
*/
|
||||
public class ListenerTagHandler extends AbstractXMLTagHandler
|
||||
{
|
||||
/** */
|
||||
private FsimContext fc = null;
|
||||
/** */
|
||||
private Logger logger = Logger.getLogger(this.getClass().getName());
|
||||
|
||||
public ListenerTagHandler(FsimContext fc)
|
||||
{
|
||||
this.fc=fc;
|
||||
setTag("listener");
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
public void startElement(String nameSpace,String tag,Attributes attributes) throws SAXException
|
||||
{
|
||||
if(getTag().equals(tag))
|
||||
{
|
||||
String className = attributes.getValue("class");
|
||||
|
||||
Object object = null;
|
||||
Class objectClass = null;
|
||||
try {
|
||||
objectClass = Class.forName(className);
|
||||
object = objectClass.newInstance();
|
||||
} catch (ExceptionInInitializerError eie) {
|
||||
} catch (LinkageError lae) {
|
||||
} catch (InstantiationException ie) {
|
||||
} catch (IllegalAccessException iae) {
|
||||
} catch (ClassNotFoundException cnfe) {
|
||||
}
|
||||
System.out.println("adding listener: "+object);
|
||||
if(object instanceof EventListener) {
|
||||
fc.addListener((EventListener)object);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|