#! /usr/bin/perl


open INFILE, "<sampleJSONXMLCART.xml";
open JSON,   ">JSONSample.json";


#print JSON "{";
#print JSON "\"confrimsTo\": \"https://project-open-data.cio.gov/v1.1/schema\"";
#print JSON "\"dataset\":[";
  

while (<INFILE>){

#print "\$_ = $_";
$line = $_;

if ($line =~/<?xml version="1.0" encoding="ISO-8859-1"?>/){
}elsif($line =~/encoding/){
#print "skipping <?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> 222222222222222222222222222222 \n";
}elsif($line =~/PODVer1_1/){

if ($started eq "yes"){
print JSON "},";
$started="no";
}else{
print JSON "{";
$started="yes";
};

#print JSON "\"accessLevel\": \"public\",";
#print JSON "\"bureauCode\": [ \"018:10\" ],";
}elsif($line =~/<type>/){
$righbracLoc=index($line,">")+1;
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-1;
$elText=substr($line,$righbracLoc,$length);
#print "\$elText = $elText\n";
#print OUTJSON "type: \"$elText\",";
#print OUTJSON "\"type\": \"$elText\",";
print JSON "\"\@type\": \"$elText\",";
#print OUTJSON "done!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!";

#title--------------------------------------------------
}elsif($line =~/title/){
#print "in the title !!!!!!!!!!!!!!!!!!!!!!!\n";
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");

if ($line =~/TIGER/){
#print "dealing with TIGEr!!!!!!!!!!!!!!!!!!!!\n";
$slashLocA=index($line, "/");
$lengthA=$slashLocA-$righbracLoc+1;
$elTextA=substr($line,$righbracLoc+1,$lengthA-1);

$elTextB=substr($line,$slashLocA+1);
$slashLocB=index($elTextB, "/")-1;
$elTextC=substr($elTextB,0,$slashLocB);
$elText = $elTextA . $elTextC;

#print "dealing with TIGEr!!!!!!!!!!!!!!!!!!!!\n";
#print "\$elTextA = $elTextA (TIGER)\n";
#print "\$elTextB = $elTextB (TIGER)\n";
#print "\$elTextC = $elTextC(TIGER)\n";
}else{
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc;
$elText=substr($line,$righbracLoc+1,$length-2);
#print "\$elText = $elText (else)\n";
};


$elLength=$righbracLoc-$leftBracket-1;
$elementMain=substr($line,$leftBracket+1, $elLength);
#elLength=$righbracLoc-$leftBracket;
$newElement= "\"" . $elementMain .  "\":";
print JSON "$newElement \"$elText\",";

#keyword----------------------------------------------------------------------------------------------------
}elsif($line =~/keyword/){
#print "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n";
if ($line =~/<keywordItem/){#keywordItem
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);
#print "inserting the keyword: $elText\n";
print JSON"\"$elText\",";
#elsif($line =~/\/keywordItem/){
#print "dealing with the end keywordItem tag \n";
#print JSON"],"
}elsif($line =~/\/keyword/){
print JSON "],";
#print "dealing with $line (end tag)\n"
}else{
print JSON "\"keyword\": [";
#print "dealing with $line (start  tag)\n";
};
#print "-----------------------------------------------------------------------\n";
}elsif($line =~/<description>/){
print "dealing with the description!!!!!!!!!!!!!!!!!!!\n";
print "\$line = $line\n";
$endTagLoc=index($line,"<\/");
print "\$endTagLoc = $endTagLoc\n";

if ($endTagLoc <0){
$descComplete="no";
$lastbracLoc=index($line,">");
$descPart1 = substr($line,$lastbracLoc+1);

#print "\$descPart1 = $descPart1\n";
}else{
$lastbracLoc=index($line,">");
$descPart1 = substr($line,$lastbracLoc+1);
$firstBracLoc=index($descPart1,"<");
$finDesc=substr($descPart1,0,$firstBracLoc-1);
print JSON "\"description\": $finDesc,";
};

}elsif($descComplete eq "no"){
#print "\$line = $line\n";
$lengthLine=length($line);
#print "\$lengthLine = $lengthLine\n";

if ($lengthLine>5){
$firstBracLoc=index($line,"<");
chomp($finDesc=substr($line,0,$firstBracLoc-1));
chomp($descPart1);
$descPart1=~s/\r\n//;
chomp($finDesc);
#chomp($completeDesc=$descPart1 . $finDesc);
#chomp($completeDesc=join $descPart1,$finDesc);
$completeDesc=join $descPart1,$finDesc;
#$completeDesc=$descPart1;
print JSON "\"description\":\" $completeDesc\",";
$descComplete="yes";
};

}elsif($line =~/<\/publisher>/){
#print OUTJSON "},";

foreach $subOrgArray(@subOrgArray){
print JSON "$subOrgArray";
};

print JSON "},";

}elsif($line =~/<publisher>/){
print JSON "\"publisher\":{";
}elsif($line =~/name/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);
print JSON "\"name\": \"$elText\",";
#subOrganization----------------------------------------------------
}elsif($line =~/subOrganizationOf/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);
$elLength=$righbracLoc-$leftBracket-1;
$elementMain=substr($line,$leftBracket+1, $elLength);
#elLength=$righbracLoc-$leftBracket;
$newElement= "\"" . $elementMain .  "\":{";
$subOrgName="\"name\":";
print JSON "$newElement $subOrgName \"$elText\",";

$subOrgArray[$subOrgArrayCounter]="}";
$subOrgArrayCounter++;
 
#-language--------------------------------------------------------------------------------
}elsif($line =~/<language>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);

$elLength=$righbracLoc-$leftBracket-1;
$elementMain=substr($line,$leftBracket+1, $elLength);

#elLength=$righbracLoc-$leftBracket;
$newElement= "\"" . $elementMain .  "\":";
print JSON "$newElement [\"$elText\"],";

# -ContactPoint---------------------------------------------------------------------------
}elsif($line =~/<\/contactPoint>/){
print JSON "},";
}elsif($line =~/<contactPoint>/){
print JSON "\"contactPoint\": {"
}elsif($line =~/<fn>/){
$firstBrac=index($line,">");
$lastBarac=rindex($line,"<");
$length=$lastBarac-$firstBrac-1;

$newFN=substr($line,$firstBrac+1,$length);
print "\$firstBrac = $firstBrac\n";
print "\$lastBarac = $lastBarac\n";
print "\$newFN = $newFN\n";
print JSON "\"fn\":\"$newFN\",";

}elsif($line =~/<hasEmail>/){
$firstBrac=index($line,">");
$lastBarac=rindex($line,"<");
$length=$lastBarac-$firstBrac-1;
$newEmail=substr($line,$firstBrac+1,$length);
print JSON "\"hasEmail\":\"$newEmail\"";

#temporal---------------------------------------------------------------------
}elsif($line =~/<begin>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$begin=substr($line,$righbracLoc+1,$length);
}elsif($line =~/<end>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$end=substr($line,$righbracLoc+1,$length);
}elsif($line =~/<\/temporal>/){
print JSON "\"$begin/$end\",";

}elsif($line =~/<temporal>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);

$elLength=$righbracLoc-$leftBracket-1;
$elementMain=substr($line,$leftBracket+1, $elLength);

#elLength=$righbracLoc-$leftBracket;
$newElement= "\"" . $elementMain .  "\":";
#print OUTJSON "$newElement \"$elText\",";
print JSON "$newElement";
print "temporal!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n";
}elsif($line =~/<modified>/){
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$newMod=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"modified\":\"$newMod\",";
#publisher--------------------------------------------------------------------
}elsif($line =~/<\/publisher>/){
#print OUTJSON "},";

foreach $subOrgArray(@subOrgArray){
print JSON "$subOrgArray";
};

print JSON "},";

}elsif($line =~/<publisher>/){
print JSON "\"publisher\":{";
}elsif($line =~/name/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);
print JSON "\"name\": \"$elText\",";
#subOrganization----------------------------------------------------
}elsif($line =~/subOrganizationOf/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$elText=substr($line,$righbracLoc+1,$length);
$elLength=$righbracLoc-$leftBracket-1;
$elementMain=substr($line,$leftBracket+1, $elLength);
#elLength=$righbracLoc-$leftBracket;
$newElement= "\"" . $elementMain .  "\":{";
$subOrgName="\"name\":";
print JSON "$newElement $subOrgName \"$elText\",";

$subOrgArray[$subOrgArrayCounter]="}";
$subOrgArrayCounter++;
}elsif($line =~/<identifier>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$newID=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"identifier\":\"$newID\",";
}elsif($line =~/<accessLevel>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$newID=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"accessLevel\":\"$newID\",";
}elsif($line =~/<bureauCode>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$newBureau=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"bureauCode\":\"$newBureau\",";
}elsif($line =~/<programCode>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$newProgram=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"programCode\":\"$newBureau\",";
#accrualPerdicity
}elsif($line =~/<accrualPeriodicity>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$Period=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"accrualPeriodicity\":\"$Period\",";
#spatial
}elsif($line =~/<spatial>/){
print JSON "\"spatial\":\"{";

#pairs------------------------------------------------------------------------------
}elsif($line =~/<pair1>/){

}elsif($line =~/<\/pair1>/){
print JSON "[[[$westBC,$northBC],";
}elsif($line =~/<pair2>/){
#skip
}elsif($line =~/<\/pair2>/){
print JSON "[$eastBC,$southBC],";
}elsif($line =~/<pair3>/){
#skip
}elsif($line =~/<\/pair3>/){
print JSON "[$eastBC,$northBC],";
}elsif($line =~/<pair4>/){
#skip
}elsif($line =~/<\/pair4>/){
print JSON "[$westBC,$southBC],";
}elsif($line =~/ <pair5>/){

}elsif($line =~/ <\/pair5>/){
print JSON "[$westBC,$northBC]]]}\",";

#coordinates---------------------------------------------------------------
}elsif($line=~/<Polygon>/){
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$spatialType=substr($line,$righbracLoc+1,$linelength-1);
print "\$spatialType = $spatialType\n";
print JSON "\\\"type\\\":\\\"$spatialType\\\",";
}elsif($line=~/<coordinates>/){
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$coordinates=substr($line,$righbracLoc+1,$linelength-1);
print "\$spatialType = $spatialType\n";
print JSON "\\\"$coordinates\\\":"
}elsif($line =~/<west>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$westBC=substr($line,$righbracLoc+1,$length);
}elsif($line =~/<north>/){
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$northBC=substr($line,$righbracLoc+1,$length);
}elsif($line =~/<south>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$southBC=substr($line,$righbracLoc+1,$length);
}elsif($line =~/<east>/){
$leftBracket=index($line,"<");
$righbracLoc=index($line,">");
$slashLoc=index($line, "/");
$length=$slashLoc-$righbracLoc-2;
$eastBC=substr($line,$righbracLoc+1,$length);
print "\$eastBC = $eastBC\n";
#accrualPerdicity
#distribution
}elsif($line =~/<distribution>/){
print JSON "\"distribution\":[{";
}elsif($line =~/<downloadURL>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$URL=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"downloadURL\": \"$URL\",";
}elsif($line =~/<mediaType>/){#default
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$mediaType=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"mediaType\": \"$mediaType\",";
}elsif($line =~/<distTitle>/){
$righbracLoc=index($line,">");
$leftbracloc= rindex($line,"<");
$linelength=$leftbracloc-$righbracLoc;
$distTile=substr($line,$righbracLoc+1,$linelength-1);
print JSON "\"title\": \"$distTile\"}],";


};#if ($line =~/<?xml version="1.0" encoding="ISO-8859-1"?>/){
};#while (<INFILE>){

close JSON;
system" sed -i.bak 's/^M$//' JSONSample.json"; 
