360 lines
9 KiB
Java
360 lines
9 KiB
Java
|
/*
|
||
|
PROGRAMME:
|
||
|
PROGRAMMER:
|
||
|
DATE:
|
||
|
PROJECT:
|
||
|
MODIFIED DATE:
|
||
|
|
||
|
*/
|
||
|
package rtree;
|
||
|
|
||
|
import java.io.*;
|
||
|
import java.net.*;
|
||
|
import java.util.List;
|
||
|
|
||
|
public class RTreeClient
|
||
|
{
|
||
|
private Socket socket;
|
||
|
public RTreeClient(String host,int port)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
socket=new Socket(host,port);
|
||
|
}
|
||
|
catch(Exception e)
|
||
|
{
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
}
|
||
|
public void insert(Element element) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="insert";
|
||
|
Object obj[]={element};
|
||
|
sendRequest(command,obj);
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public void delete(LeafElement element) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="delete";
|
||
|
Object obj[]={element};
|
||
|
sendRequest(command,obj);
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List overlaps(Rect rect) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="overlaps";
|
||
|
Object obj[]={rect};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List nonDisjoint(Rect rect) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="nondisjoint";
|
||
|
Object obj[]={rect};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List containedBy(Rect rect) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="containedby";
|
||
|
Object obj[]={rect};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List equal(Rect rect) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="equal";
|
||
|
Object obj[]={rect};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List meet(Rect rect) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="meet";
|
||
|
Object obj[]={rect};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List contains(Rect rect) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="contains";
|
||
|
Object obj[]={rect};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List getAllElements() throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="getallelements";
|
||
|
Object[] response=sendRequest(command,null);
|
||
|
//List v=(List)response[0];
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public Rect getTreeMBR() throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="gettreembr";
|
||
|
Object[] response=sendRequest(command,null);
|
||
|
return (Rect) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public ABL[] nearestSearch(Point pt,long ln,int in) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="nearest";
|
||
|
Object obj[]={pt,new Long(ln),new Integer(in)};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
if(response!=null)
|
||
|
{
|
||
|
ABL abl[]=new ABL[response.length];
|
||
|
for(int i=0;i<response.length;i++)
|
||
|
{
|
||
|
abl[i]=(ABL)response[i];
|
||
|
}
|
||
|
return abl;
|
||
|
}
|
||
|
else
|
||
|
return null;
|
||
|
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
public List nearestSearch(Point pt,long ln) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
String command="nearestsearch";
|
||
|
Object obj[]={pt,new Long(ln)};
|
||
|
Object[] response=sendRequest(command,obj);
|
||
|
return (List) response[0];
|
||
|
}
|
||
|
catch(RTreeException e)
|
||
|
{
|
||
|
throw e;
|
||
|
}
|
||
|
}
|
||
|
private Object[] sendRequest(String command,Object[] param) throws RTreeException
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
ByteArrayOutputStream bout=new ByteArrayOutputStream ();
|
||
|
ObjectOutputStream out=new ObjectOutputStream (bout);
|
||
|
// ObjectOutputStream out=new ObjectOutputStream(socket.getOutputStream());
|
||
|
OutputStream fout=socket.getOutputStream ();
|
||
|
out.writeObject(command);
|
||
|
if(param!=null)
|
||
|
{
|
||
|
out.writeObject(new Integer (param.length));
|
||
|
for(int i=0;i<param.length;i++)
|
||
|
{
|
||
|
out.writeObject(param[i]);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
out.writeObject(new Integer(0));
|
||
|
}
|
||
|
// out.flush();
|
||
|
out.close();
|
||
|
//long time = System.currentTimeMillis();
|
||
|
fout.write(bout.toByteArray());
|
||
|
fout.flush();
|
||
|
// InputStream in=socket.getInputStream();
|
||
|
/*
|
||
|
while(in.available()==0)
|
||
|
{
|
||
|
Thread.sleep(10);
|
||
|
}
|
||
|
int rTotal=in.available();
|
||
|
System.out.println("RTotal..........."+rTotal);
|
||
|
byte[] bb=new byte[in.available()];
|
||
|
in.read(bb,0,in.available());
|
||
|
byte ln[]=new byte[10];
|
||
|
System.arraycopy(bb,0,ln,0,10);
|
||
|
ByteArrayInputStream lin=new ByteArrayInputStream(ln);
|
||
|
ObjectInputStream loin=new ObjectInputStream(lin);
|
||
|
int total=loin.readInt();
|
||
|
byte bbf[]=new byte[rTotal];
|
||
|
System.out.println(total+"..."+bbf.length);
|
||
|
System.arraycopy(bb,10,bbf,0,rTotal-10);
|
||
|
int pos=bbf.length;
|
||
|
System.out.println("Postion................."+pos);
|
||
|
while(rTotal<total)
|
||
|
{
|
||
|
int avail=in.available();
|
||
|
while(avail==0)
|
||
|
{
|
||
|
avail=in.available();
|
||
|
}
|
||
|
byte temp[]=new byte[avail];
|
||
|
in.read(temp,0,avail);
|
||
|
byte temp1[]=new byte[avail+bbf.length];
|
||
|
System.arraycopy(bbf,0,temp1,0,bbf.length);
|
||
|
System.arraycopy(temp,0,temp1,bbf.length,temp.length);
|
||
|
bbf=temp1;
|
||
|
rTotal+=avail;
|
||
|
System.out.println(bbf.length+"______________________");
|
||
|
System.arraycopy(temp,0,bbf,pos,temp.length);
|
||
|
pos+=avail;
|
||
|
Thread.sleep(10);
|
||
|
}
|
||
|
|
||
|
|
||
|
*/
|
||
|
|
||
|
|
||
|
InputStream in=socket.getInputStream();
|
||
|
//System.out.println("RTreeClient.sendRequest : time to receive response "
|
||
|
//+ (System.currentTimeMillis() - time));
|
||
|
//time = System.currentTimeMillis();
|
||
|
|
||
|
byte bbf[]=new byte[100];
|
||
|
|
||
|
int i=0;
|
||
|
int total=-1;
|
||
|
while(true)
|
||
|
{
|
||
|
int val=in.read(bbf,i,1);
|
||
|
if(val==-1)
|
||
|
break;
|
||
|
i++;
|
||
|
if(i==10)
|
||
|
{
|
||
|
byte ln[]=new byte[10];
|
||
|
System.arraycopy(bbf,0,ln,0,10);
|
||
|
ByteArrayInputStream lin=new ByteArrayInputStream(ln);
|
||
|
ObjectInputStream loin=new ObjectInputStream(lin);
|
||
|
total=loin.readInt();
|
||
|
byte temp[]=new byte[total];
|
||
|
System.arraycopy(bbf,0,temp,0,bbf.length);
|
||
|
bbf=temp;
|
||
|
}
|
||
|
if(i>=total && total!=-1)
|
||
|
{
|
||
|
//System.out.println("read completed..."+bbf.length);
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
byte tby[]=new byte[bbf.length-10];
|
||
|
System.arraycopy(bbf,10,tby,0,tby.length);
|
||
|
ByteArrayInputStream bin=new ByteArrayInputStream(tby);
|
||
|
ObjectInputStream oIn=new ObjectInputStream(bin);
|
||
|
Boolean bool=(Boolean) oIn.readObject();
|
||
|
//System.out.println("boolean.........."+bool);
|
||
|
Integer count=(Integer) oIn.readObject();
|
||
|
//System.out.println("count.........."+count);
|
||
|
if(bool.booleanValue())
|
||
|
{
|
||
|
Object[] obj=new Object[count.intValue()];
|
||
|
for(int j=0;j<count.intValue();j++)
|
||
|
{
|
||
|
obj[j]=oIn.readObject();
|
||
|
}
|
||
|
// oIn.close();
|
||
|
//System.out.println("RTreeClient.sendRequest : time to process input data "
|
||
|
// + (System.currentTimeMillis() - time));
|
||
|
|
||
|
return obj;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
throw (Exception) oIn.readObject();
|
||
|
}
|
||
|
}
|
||
|
catch(Exception e)
|
||
|
{
|
||
|
e.printStackTrace();
|
||
|
throw new RTreeException(e.getMessage());
|
||
|
}
|
||
|
}
|
||
|
/**
|
||
|
public static void main(String args[])
|
||
|
{
|
||
|
|
||
|
try
|
||
|
{
|
||
|
RTreeClient cln=new RTreeClient("localhost",7001);
|
||
|
System.out.println("Connection established1...");
|
||
|
Rect rect=cln.getTreeMBR();
|
||
|
System.out.println("........."+rect);
|
||
|
List v=cln.getAllElements();//contains(new Rect(0,0,1000,1000));
|
||
|
System.out.println(v.size());
|
||
|
System.out.println(v.get(0));
|
||
|
}
|
||
|
catch(Exception e)
|
||
|
{
|
||
|
e.printStackTrace();
|
||
|
}
|
||
|
} */
|
||
|
}
|